obor2 a écrit:La réponse de Christian77320 me paraît la plus appropriée. Ce qu'il propose de faire, c'est de créer une seconde table qui comprendra l'identificateur du père et de la mère d'une "personne". La table personne n'aura plus qu'à pointer vers le couple de parents correspondant dans cette nouvelle table.
Cette séparation est aussi un méthode élégante de travailler. Imagine qu'après ton travail tu veuilles faire la relation des couples mariées... Misère, la galère si tu n'utilisais que ton unique table "personne".
Comme tu veux apprendre, je reste vague dans les explications.

C'est en effet plus "propre" dans la mesure où aucun ID ne figure alors plus dans la table des personnes. Par contre ça ne ralentit pas un peu la requête ? En outre j'avais plutôt compris que Christian77320 proposait de faire une table de relation "N à N" (avec l'ID ), mais ton interprétation est plus cohérente en effet.
Pour les couples mariés, c'est différent à mon avis, on associerait plutôt de façon "symétrique" deux personnes, on peut donc créer une relation "N à N" à l'aide d'une table "mariages", avec l'ID de l'épouse, celui de l'époux. On peut même y ajouter plein de paramètres sur ledit mariage (date, témoins, ...). Dans ce cas les champs de la table "mariages" seront un peu comme des relations "N à N", "pondérées" par des paramètres supplémentaires. Ca permet même de fabriquer plusieurs mariages différents pour les mêmes personnes, à cause de divorces, de remariages, etc., ce qui est très proche de la problématique posée.
En structuration, mieux vaut faire au plus juste, et notamment au plus rigoureux par rapport à la réalité. En l'occurrence, pour une relation "parent/enfant", une relation "1 à N", avec l'id des parents dans la fiche "personnes", permet de voir à coup sûr, pour quelqu'un qui regarde juste la base, qu'une personne n'a qu'une mère et qu'un père. Ceci dit ta solution dans ce cas revient exactement au même à l'exécution, disons que c'est une étape d'optimisation par rapport à la structuration du problème...
De toute façon, modéliser "proprement" en base de données relationnelle c'est un peu utopique, les BDDR sont trop axées "tables" pour modéliser correctement quoi que ce soit (à part des listes plates). La modélisation OO est nettement plus adaptée (rien que pour l'héritage déjà !), mais les BDDO (libres et performantes en plus) ça court pas les rues !