Оригинальный метод Чена сопоставил каждое отношение сущности и отношение отношения к отдельной таблице. Это будет производить 3 таблицы:
E1 (e1 PK)
E2 (e2 PK)
R (e2 PK, e1)
Полное участие либо E1
или E2
могут быть обработаны с помощью ограничения FK.
Как вы можете видеть, E2
и R
имеют одинаковый детерминант/ПК. Это позволяет нам объединить два отношения в одну таблицу с использованием столбца e1
с нулевым значением, если E2
участвует частично в отношении, не является нулевым, если он полностью участвует. Полное участие E1
все еще требует FK ограничения:
E1 (e1 PK)
E2 (e2 PK, e1)
Я хочу знать, что является более правильным.
Логично, что два решения в значительной степени эквивалентны.
Создание 3 таблиц поддерживает структуру концептуальной модели (ER), но создает больше таблиц, что увеличивает сложность в одном направлении. С другой стороны, это позволяет избежать нулей, которые создают их собственную сложность.
Создание 2 таблиц уменьшает количество таблиц, но вводит значения null. Кроме того, мы должны прибегать к различным механизмам (с нулевыми столбцами и ограничениями FK) для реализации единой концепции (полного участия).
Другие требования также могут повлиять на решение. Если у меня есть 50 необязательных атрибутов, я, конечно, не хочу иметь дело с 50 отдельными таблицами! Однако, если бы я хотел создать другое отношение (R2
), которое применяется только к значениям в E2
, которые уже участвуют в R
, я мог бы применить это ограничение в первом проекте с использованием ограничения FK: R2 (e2) referencing R (e2)
. Во втором дизайне мне нужно будет использовать триггер, поскольку я хочу только разрешить ссылки на e2
, которые имеют ненулевые значения e1
.
В конечном счете нет правильного ответа. Концептуальное, логическое и физическое моделирование затрагивает различные проблемы, и пока неизвестные требования будут влиять на вашу модель и противоречат вашим решениям. Как и в программировании, старайтесь держать вещи простыми, постоянно рефакторируйте и надейтесь на лучшее.