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