Почему я должен избегать циклов при разработке отношений для базы данных? - PullRequest
51 голосов
/ 14 ноября 2011

Кто-то сказал мне, что петли в модели данных были плохим дизайном. Я слышал это раньше пару раз, но не обращал особого внимания. Например, у вас есть сущности Пользователь, Проект, Деятельность. Проект принадлежит пользователю, поэтому мы имеем отношение один-ко-многим от пользователя к проекту. Действие может быть назначено одному пользователю, другое отношение один-ко-многим от пользователя к действию. Конечно, проект определяется набором действий, другим одно-многим отношением от Проекта к Деятельности. Таким образом, цикл формируется.

Я спросил этого парня, почему это плохой дизайн, но он сказал мне, что тоже не знает, ему тоже сказали, обезьяна учится лучше всего.

Я пытался искать, но, по-моему, я не использовал правильные слова, однако мне кажется, что это нечто фундаментальное для того, кто пытается создать БД.

Итак, кто-нибудь может подсказать мне полезную информацию о циклах / циклах на диаграммах er / db, их следует избегать?

1 Ответ

46 голосов
/ 15 ноября 2011

В главе 3 этой статьи действительно очень хорошо рассматривается петля отношений.

Однако, как правило, наиболее распространенной проблемой с циклами является согласованность избыточной информации.

Рассмотрим случай (из бумаги), когда у родителя много детей; каждый ребенок посещает школу. Существует третья связь между родителем и школой («у родителей есть ребенок в школе»). Однако: вы не хотите явно моделировать 3-е отношение; это полностью выводится из двух других. Если вы сделали это явно, вам нужно убедиться, что цикл всегда был согласованным.

Так что в этом случае вы бы хотели избежать цикла. Однако: петли не всегда плохие. Снова взяв приведенный выше пример, рассмотрите возможность моделирования случая, когда родитель является руководителем в школе. Это также создаст цикл. В этом случае, однако, это действительно: невозможно определить отношения «родитель - губернатор в школе» из двух других отношений.

Итак, подведем итог: не моделируйте циклы, когда одно отношение полностью выводится из других вместе взятых. Но можно создавать циклы, когда они не выводимы.

Рекомендую статью, хотя она дает гораздо лучшее описание, чем я могу дать здесь.

НТН.

...