Bonjour,
J'ai posé pas mal de questions ces derniers jours... et j'en ai une de plus! Ca devrait se calmer après ça...
Voici un exemple de table:
Chat(id, nom, typePelage, detailPelage)
Considérons que "typePelage" peut valoir soit "poil", soit "peau".
Si "typePelage" vaut "poil" -> "detailPelage" peut valoir soit "blanc", soit "noir".
Si "TypePelage" vaut "peau" -> "detailPelage" peut valoir soit "lisse", soit "frippé".
Je me demande comment gérer ça, et quelle serait la meilleure approche. Exemples:
1) Limiter simplement "typePelage" à "poil" ou "peau", et "detailPelage" à "blanc", noir", "frippé" ou "lisse". C'est donc le programme qui devra s'assurer que les données sont cohérentes, car rien n'empêche d'introduire dans la DB le couple erroné "peau / blanc".
2) Créer simplement un trigger pour insert et update, qui s'assure que les règles sont bien respectées entre "detailPelage" et "typePelage".
3) Remplacer "chat" par deux tables "chatPoilu" et "ChatChauve", pour lesquelles on pourra définir clairement les valeurs possibles pour "typePelage" et "detailPelage"...
Le problème avec la troisième solution, c'est qu'on en arriverait à faire deux SELECT pour pouvoir récupérer tous les chats (ou alors il y a une solution à laquelle je n'ai pas pensé), ce que je préfèrerais éviter.
Note: j'ai tout représenté ici dans une seule table pour faire simple. Il y aurait effectivement moyen de mettre en place une table "detailPelage" et "typePelage"... mais la problématique serait même: l'ai l'impression que si on ne met pas les détails du pelage dans la même table, on en arrive à dupliquer les select si on désire obtenir tous les chats avec le détail de leur pelage... Et si on met tous les chats dans une même table avec l'information concernant leur pelage, on prend le risque d'avoir des données incohérentes (à part avec un trigger qui vérifie les données, ce que j'aurais également préféré éviter).
Je suppose qu'il s'agit là d'un cas assez classique?
Merci d'avance!
Partager