Диаграмма отношений сущностей с моделью проектирования базы данных Связь n-сущностей с сущностью 1: m - лучшая практика - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть 3 объекта (клиенты, посредник, Controlstation), и у каждого из них может быть несколько рядов другого объекта (контакты).Я создал диаграмму отношений сущностей с краткой нотацией, чтобы установить это соединение, и мне пришлось создать еще три сущности (Controlstation_Contact, Reseller_Contacts, Clients_Contacts), как вы можете видеть на диаграмме.Это лучший способ сделать это или я могу сделать это лучше?Я думаю, что использование Первичного ключа клиента, посредника и Controlstation в объекте «Контакты» в качестве внешнего ключа не очень хорошая идея.Спасибо за любой совет

enter image description here

1 Ответ

0 голосов
/ 28 сентября 2018

Нет, это в основном то, что вам нужно сделать, чтобы сохранить ссылочную целостность: создать много: много связей между каждой имеющей контакт сущностью и самим Contacts, даже если один контакт может никогда не относиться к более чем одной другой сущности.Технически связь между Contacts и каждой соединительной таблицей одна: многие, если вы не добавите уникальное ограничение к Contacts_Id, поэтому диаграмма не совсем точна.

У вас может возникнуть соблазн сократить числотаблиц путем создания одного промежуточного объекта с полями Owner_Id, Owner_Type и Contacts_Id, где Owner_Type указывает, какие из Clients, Resellers и Controlstations применимы.Не сдавайся!База данных не может гарантировать, что Owner_Id ссылается на значение в нескольких других таблицах, поэтому вы открываете себя для некоторых проблем с нарушением целостности данных.

На основании вашего случая это выглядит как SQL Server?Если СУБД не задана в камне, PostgreSQL имеет наследование таблиц, которое позволит вам объединить три объекта, имеющих контакты, за родительской таблицей.Тогда вы можете иметь внешний ключ к родительскому элементу в своей таблице контактов или, в худшем случае, иметь только одну соединительную таблицу для поддержки отношения многие: многие.Хотя это не стандартная функция RDBMS, так что это Postgres или ничего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...