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