Фактически, если вы следуете модели сущности-отношения строго так, как первоначально описанный Питером Ченом, у вас будет 5 таблиц - 3 отношения сущностей и 2 отношения отношений.
Существует переходные многие-ко-многим между Milkshake
и Coronary Care
через два один-ко-многим. В этом случае таблица Person
не должна быть вовлечена - вы могли бы присоединиться Owns
к Attends
на ключе Person
они имеют общие черты:
SELECT milkshake_id, coronary_care_id
FROM Owns
INNER JOIN Attends ON Owns.person_id = Attends.person_id
Теперь, если вы денормализовать таблицы с тем же определителем, вы получаете 3 таблицы вы имели в виду в вашем вопросе:
в этом случае соотношение между Milkshake
и Person
записывается в Milkshake
таблице, и отношения между Person
и CoronaryCare
записывается в таблице CoronaryCare
. (Помните, что ограничения внешнего ключа не являются отношениями.)
Вы все еще можете получить много-ко-многим:
SELECT milkshake_id, coronary_care_id
FROM Milkshake
INNER JOIN CoronaryCare ON Milkshake.person_id = CoronaryCare.person_id
Как вы можете видеть, Person
таблицы не ссылка. Даже при денормализации у вас все еще есть два отношения «один ко многим», за исключением того, что они теперь записаны в таблицах Milkshake
и CoronaryCare
.
Источники, на которые вы ссылаетесь, рекомендуют таблицу ссылок ссылаться на прямые отношения «многие ко многим», а не переходные отношения «многие ко многим». Нам не нужно записывать транзитивные отношения, так как мы можем их генерировать, комбинируя два или более прямых отношения.
Отношения «многие ко многим» являются естественной частью моделирования данных реляционных и сущностных отношений и не вызывают никаких проблем в запросах, если вы их понимаете.