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

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

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

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

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

1 ответ

Решение

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

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

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

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

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

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

НТН.

Другие вопросы по тегам