web-dev-qa-db-fra.com

Pourquoi devrais-je éviter les boucles lors de la conception de relations pour une base de données?

Quelqu'un m'a dit que c'était une mauvaise conception d'avoir des boucles dans le modèle de données. J'ai entendu cela avant plusieurs fois, mais je n'y ai pas prêté beaucoup d'attention. Par exemple, vous avez des entités Utilisateur, Projet, Activité. Un projet appartient à un utilisateur, nous avons donc une relation un-à-plusieurs de l'utilisateur au projet. Une activité peut être affectée à un seul utilisateur, une autre relation un-à-plusieurs de l'utilisateur à l'activité. Bien sûr, un projet est défini par un ensemble d'activités, une autre relation un-à-plusieurs du projet à l'activité. Ainsi, une boucle est formée.

J'ai demandé à ce gars pourquoi c'était mauvais design mais il m'a dit qu'il ne savait pas non plus, on lui a dit aussi, le singe apprend à son mieux.

J'ai essayé de chercher, mais je suppose que je n'ai pas utilisé les mots appropriés, mais cela me semble quelque chose qui devrait être fondamental pour quelqu'un qui essaie de concevoir une base de données.

Alors, quelqu'un peut-il m'indiquer des informations utiles sur les boucles/cycles dans les diagrammes er/db, devraient-elles être évitées?

53
pgpb.padilla

Il y a un très bon traitement des boucles relationnelles dans le chapitre 3 de cet article .

Cependant, le problème le plus courant avec les boucles est généralement la cohérence des informations redondantes.

Prenons le cas (tiré de l'article) où un parent a de nombreux enfants; chaque enfant fréquente une école. Il existe une troisième relation entre le parent et l'école ("le parent a un enfant à l'école"). Cependant: vous ne voulez pas modéliser explicitement les 3e relations; c'est complètement dérivable des deux autres. Si vous l'avez capturé explicitement, vous devez vous assurer que la boucle est toujours cohérente.

Donc, dans ce cas, vous voudriez éviter la boucle. Cependant: les boucles ne sont pas universellement mauvaises. En reprenant l'exemple ci-dessus, envisagez de modéliser le cas où un parent est gouverneur dans une école. Cela créerait également une boucle. Dans ce cas, bien qu'il soit valide: il n'est pas possible de déduire la relation "le parent est le gouverneur à l'école" des deux autres relations.

Donc en résumé: ne modélisez pas les boucles quand une relation est complètement dérivable des autres combinées. Mais c'est OK de créer des boucles quand elles ne sont pas dérivables.

Je recommanderais cependant le document, il donne une bien meilleure description que je ne peux donner ici.

hth.

50
sfinnie