Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[MySQL] Probleme de conception pour une table (un peu long mais pas trop)

9 réponses
Avatar
Khône
Salut

Je dois modéliser une bdd de gestion d'acte (mariage, décès, etc.)
et c'est le cas des mariages qui est problématique.
En effet, un acte peut regrouper plusieurs mariages et une personne
peut se marier plusieurs fois

J'ai fais ça comme ça :
tables :

PERSONNE
id_personne
nom_personne
prenom_personne

ACTE
id_acte
texte_acte
id_type_acte (qui me permet de savoir si on est dans le cas d'un mariage ou
autre)

ACTE_PERSONNE
id_acte
id_personne

MARIAGE
id_acte
id_personne_1
id_personne_2

Mes questions :
1) Vous auriez fait ça comme ça ?
2) Dans le cas où vous avez répondu oui au 1, comment faire cette requête :
je connais un id_personne, je sais également que cette personne est liée à
un
acte de mariage dont je connais l'id, et j'aimerai connaitre l'id de la
deuxieme personne
de ce mariage. Est-il possible de le faire autrement que comme ça :

SELECT id_personne_1, id_personne_2
FROM MARIAGE
WHERE id_acte = 2 (par exemple)
AND ((id_personne_1 = 3) OR (id_personne_2 = 3))
et d'être ensuite obligé de comparer le résultat à l'id de la personne de
départ pour savoir
laquelle des deux colonnes je recherchai.

Note : on crée une clé sur trois colonnes dans la table MARIAGE

Merci à ceux qui liront

Khône

9 réponses

Avatar
Etienne SOBOLE
"Khône" a écrit dans le message de news:
40c589b4$0$4223$
1) Vous auriez fait ça comme ça ?


peut etre :)
sauf qu'on se demande ou est la cle auto incrémentée de id_acte !!!

serait plus logique de faire un
PERSONNE
id_personne

ACTE
id_acte_description
texte_acte

MARIAGE
id_mariage
id_acte_description
id_personne_1
id_personne_2

tout dépend biensur de ce qu'il ca y avoir dans 'texte_acte'. Ce texte est
il le meme pour tous les mariages???

2) Dans le cas où vous avez répondu oui au 1, comment faire cette requête


:
je connais un id_personne, je sais également que cette personne est liée à
un
acte de mariage dont je connais l'id, et j'aimerai connaitre l'id de la
deuxieme personne
de ce mariage. Est-il possible de le faire autrement que comme ça :

SELECT id_personne_1, id_personne_2
FROM MARIAGE
WHERE id_acte = 2 (par exemple)
AND ((id_personne_1 = 3) OR (id_personne_2 = 3))
et d'être ensuite obligé de comparer le résultat à l'id de la personne de
départ pour savoir
laquelle des deux colonnes je recherchai.



Ouai ou alors faut pouvoir identifier la personne via le sex par exemple.
et tu modifies ta table mariage par:

PERSONNE
id_personne
sexe
...

MARIAGE
id_mariage
id_acte_description
id_personne_homme
id_personne_femme

voila...
evidement cela ne te permet plus de trouver tous les actes d'une personne...

bref. faudrai en connaitre un peu plus sur le besoin...
quelle est l'unité de base qui est manipulée?
une personne
un acte
un type d'acte
...

Etienne
Avatar
Etienne SOBOLE
Apres moult réflexion.
c'est peut tres pas une super structure que je t'ai proposée.

Finalement je pense que le mieux serait encore

ACTE
id_acte (auto)
texte_acte

PERSONNE
id_personne (auto)
nom_personne
prenom_personne

ACTEUR
id_acte
id_personne
id_type_acte

voila.
ca c'est beaucoup mieux...

pour ta requete, ca donne
SELECT id_personne FROM acteur WHERE id_acte = 2 AND id_personne <> 3;
Voila

PS : eventuellement, tu peux basculer id_type_acte dans la table ACTE.
le laisser dans ACTEUR permet d'associer deux fois une meme personne a un
meme acte en lui donnént un rôle différent...
je sais pas trop si ca te sert.

Etienne
Avatar
Khône
Merci pour tes réponses

sauf que ...

Un acte peut être un mariage ou un bapteme ou une naissance, etc.
Pire, quand un acte est un mariage, il peut en fait faire référence
à plusieurs.
Donc un acte peut être lié à 1, n personnes et vice versa
Simplement, j'aimerai pouvoir modéliser les actes tous de la même
manière et pour le cas spécifique d'un ou plusieurs mariages, savoir
qui s'est marié avec qui ...
Le coup du sexe n'est pas inintéressant


PS : eventuellement, tu peux basculer id_type_acte dans la table ACTE.
le laisser dans ACTEUR permet d'associer deux fois une meme personne a un
meme acte en lui donnént un rôle différent...
je sais pas trop si ca te sert.


je comprends pas, l'acte étant entièrement déterminé par id_acte

Khône
Avatar
Etienne SOBOLE
"Khône" a écrit dans le message de news:
40c59cd3$0$4228$

Un acte peut être un mariage ou un bapteme ou une naissance, etc.
Pire, quand un acte est un mariage, il peut en fait faire référence
à plusieurs.
Donc un acte peut être lié à 1, n personnes et vice versa



ui c'est bien le but de la table ACTEUR

Simplement, j'aimerai pouvoir modéliser les actes tous de la même
manière et pour le cas spécifique d'un ou plusieurs mariages, savoir
qui s'est marié avec qui ...



Ben ca aussi ca marche...
m'enfin effectivement passe le id_type_acte dans la table ACTE
ce qui donne

ACTE
id_acte (auto)
texte_acte
id_type_acte

PERSONNE
id_personne (auto)
nom_personne
prenom_personne

ACTEUR
id_acte
id_personne
id_role

Le coup du sexe n'est pas inintéressant



Ben dans le deuxieme chema tu n'a meme plus besoin du sexe...

je détaille id_role
1 = est le mari
2 = est la femme
3 = est le pere
4 = est la mere
5 = est l'enfant

soit les données suivantes
ACTE
1 | mariage blabla | 1
2 | mariage blabla | 1
3 | naissance blabla | 2

PERSONNE
1 | DUGLAND | Bob
2 | DUPONT | Julie
3 | SMITH | Karine
4 | DUGLAND | Pauline

ACTEUR
1 | 1 | 1
1 | 2 | 2
2 | 1 | 1
2 | 3 | 2
3 | 1 | 3
3 | 3 | 4
3 | 4 | 5

voila donc l'acte 1 permet de dire que Bob DUGLAND et marié avec Julie
DUPONT
l'acte 2 permet de dire que Bob DUGLAND et marié avec Karine SMITH
l'acte 3 permet de dire que Bob DUGLAND et Karine SMITH ont eu un enfant qui
est Pauline DUGLAND

voila. les requetes ne sont pas complexe...

Etienne
Avatar
Fred BROUARD - SQLpro
PERSONNE
id_personne
nom_personne
prenom_personne
date_naissance
date_deces

CONTRAT (dont mariage, PACS...)
id_contrat
texte_contrat
id_pers1
id_pers2
id_type_contrat (qui me permet de savoir si on est dans le cas d'un mariage ou
autre)
date_debut
lieu_debut
date_fin
lieu_fin

suffit.

Prévoir un trigger pour que les actes ne se recouvrent pas pour une même personne.

A +


Khône a écrit:
Salut

Je dois modéliser une bdd de gestion d'acte (mariage, décès, etc.)
et c'est le cas des mariages qui est problématique.
En effet, un acte peut regrouper plusieurs mariages et une personne
peut se marier plusieurs fois

J'ai fais ça comme ça :
tables :

PERSONNE
id_personne
nom_personne
prenom_personne

ACTE
id_acte
texte_acte
id_type_acte (qui me permet de savoir si on est dans le cas d'un mariage ou
autre)

ACTE_PERSONNE
id_acte
id_personne

MARIAGE
id_acte
id_personne_1
id_personne_2

Mes questions :
1) Vous auriez fait ça comme ça ?
2) Dans le cas où vous avez répondu oui au 1, comment faire cette requête :
je connais un id_personne, je sais également que cette personne est liée à
un
acte de mariage dont je connais l'id, et j'aimerai connaitre l'id de la
deuxieme personne
de ce mariage. Est-il possible de le faire autrement que comme ça :

SELECT id_personne_1, id_personne_2
FROM MARIAGE
WHERE id_acte = 2 (par exemple)
AND ((id_personne_1 = 3) OR (id_personne_2 = 3))
et d'être ensuite obligé de comparer le résultat à l'id de la personne de
départ pour savoir
laquelle des deux colonnes je recherchai.

Note : on crée une clé sur trois colonnes dans la table MARIAGE

Merci à ceux qui liront

Khône





--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Etienne SOBOLE
"Fred BROUARD - SQLpro" a écrit dans le message
de news:

CONTRAT (dont mariage, PACS...)
id_contrat
texte_contrat
id_pers1
id_pers2
id_type_contrat (qui me permet de savoir si on est dans le cas d'un


mariage ou
autre)
date_debut
lieu_debut
date_fin
lieu_fin



ouai mais tu fais quoi pour les deces, ou naissance ???

deces -> une seule personne impliqué
naissance -> 3 personnes impliquée non?

Etienne
Avatar
Fred BROUARD - SQLpro
Deces et naissance ne sont pas des contrats.... Et sont inclus dans les personnes : date naissance, date deces.

A +

Etienne SOBOLE a écrit:
"Fred BROUARD - SQLpro" a écrit dans le message
de news:


CONTRAT (dont mariage, PACS...)
id_contrat
texte_contrat
id_pers1
id_pers2
id_type_contrat (qui me permet de savoir si on est dans le cas d'un



mariage ou

autre)
date_debut
lieu_debut
date_fin
lieu_fin




ouai mais tu fais quoi pour les deces, ou naissance ???

deces -> une seule personne impliqué
naissance -> 3 personnes impliquée non?

Etienne





--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Etienne SOBOLE
Deces et naissance ne sont pas des contrats.... Et sont inclus dans les


personnes : date naissance, date deces.

Ah oui bonne remarque...
mais dans ce cas, tu dois prévoir pour chaque personne un père et une mère.
et dans ce cas pourquoi pas un conjoint???

le bleme c'est surtout le manque de souplesse de ton schema (me semble t-il)
ca n'anticipe pas l'arrivé de "nouveaux" actes...!

Enfin bon, moi je dis ca...
Etienne

"Fred BROUARD - SQLpro" a écrit dans le message
de news: 40c5d9c2$0$306$
Deces et naissance ne sont pas des contrats.... Et sont inclus dans les


personnes : date naissance, date deces.

A +

Etienne SOBOLE a écrit:
> "Fred BROUARD - SQLpro" a écrit dans le


message
> de news:
>
>
>>CONTRAT (dont mariage, PACS...)
>>id_contrat
>>texte_contrat
>>id_pers1
>>id_pers2
>>id_type_contrat (qui me permet de savoir si on est dans le cas d'un
>
> mariage ou
>
>>autre)
>>date_debut
>>lieu_debut
>>date_fin
>>lieu_fin
>
>
> ouai mais tu fais quoi pour les deces, ou naissance ???
>
> deces -> une seule personne impliqué
> naissance -> 3 personnes impliquée non?
>
> Etienne
>
>

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

Avatar
Fred BROUARD - SQLpro
tu ne peut q'avoir au maximum 0 à 1 père et/ou mère donc auto relation directe
Le terme le plus approprié étant géniteur, plutôt que père et mère...

En effet tu peut avoir eut un géniteur x et être élevé par y. Dans ce cas il y a un contrat civil...

A +

Etienne SOBOLE a écrit:
Deces et naissance ne sont pas des contrats.... Et sont inclus dans les



personnes : date naissance, date deces.

Ah oui bonne remarque...
mais dans ce cas, tu dois prévoir pour chaque personne un père et une mère.
et dans ce cas pourquoi pas un conjoint???

le bleme c'est surtout le manque de souplesse de ton schema (me semble t-il)
ca n'anticipe pas l'arrivé de "nouveaux" actes...!

Enfin bon, moi je dis ca...
Etienne

"Fred BROUARD - SQLpro" a écrit dans le message
de news: 40c5d9c2$0$306$

Deces et naissance ne sont pas des contrats.... Et sont inclus dans les



personnes : date naissance, date deces.

A +

Etienne SOBOLE a écrit:

"Fred BROUARD - SQLpro" a écrit dans le





message

de news:



CONTRAT (dont mariage, PACS...)
id_contrat
texte_contrat
id_pers1
id_pers2
id_type_contrat (qui me permet de savoir si on est dans le cas d'un



mariage ou


autre)
date_debut
lieu_debut
date_fin
lieu_fin




ouai mais tu fais quoi pour les deces, ou naissance ???

deces -> une seule personne impliqué
naissance -> 3 personnes impliquée non?

Etienne





--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************









--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************