Pour commencer, je tiens à préciser que je ne connais pas assez PHP pour te donner les syntaxes, mais coté base de données j'ai une petite expérience.
Tu te retrouves confronté à un problème récurrent de hiérarchie.
Pour ton cas :
Tout cheval à un père et une mère
Tout père est un cheval, il à donc un père et une mère
Tout mère est un cheval, elle à donc un père et une mère
Même raisonnement pour les grands parents et les poulains à venir.
Donc, je mettrais en place une table 'Cheval' constituée de la façon suivante :
Champ 1 : 'Id cheval' de type numérique auto incrément
Champ 2 : 'Sexe' de type caractère ( M ou F )
Champ 3 : 'Nom' de type caractère
Champ 4 : 'Date naissance' de type date
Champ 5 : 'id du père' de type numérique
Champ 6 : 'id de la mère' de type numérique
Ceci avec 2 auto jointures :
- du champ 5 vers le champ 1
(chaque info du champ 5 (sauf les ?) doit exister dans le champ 1)
- du champ 6 vers le champ 1
(chaque info du champ 6 (sauf les ?) doit exister dans le champ 1)
Donc voici la table cheval :
Code : Tout sélectionner
|id|sexe|nom|date naiss|id père|id mère|
|--|----|---|----------|-------|-------|
| 1| M | A | | ? | ? |
| 2| F | B | | ? | ? |
| 3| M | C | | 1 | 2 |
| 4| F | D | | 1 | ? |
| 5| M | E | | ? | 2 |
| 6| M | F | | ? | ? |
| 7| F | G | | 6 | 2 |
| 8| F | H | | 6 | 4 |
| 9| M | I | | 5 | 8 |
|10| M | J | | 6 | 8 |
En suite il suffit de lire les informations dans la table :
Le cheval C dont l'id est 3 n'est père d'aucun cheval
La jument B dont l'id est 2 est mère 3 chevaux (C, E et G : 2 males, 1 femelle)
Si j'ai bien compris ton problème, pour moi c'est la structure idéale.