отношения многие ко многим - PullRequest
4 голосов
/ 28 апреля 2011

Если у меня есть две таблицы - table beer и table distributor, у каждой есть первичный ключ и третья таблица с внешними ключами и вызовами beer_distributor

enter image description here

Достаточно ли нового поля (первичного ключа) в этой таблице? Другой способ - с соединениями, верно? Для получения например DUVEL De vroliijke пьющий?

Ответы [ 2 ]

4 голосов
/ 28 апреля 2011

У вас определенно правильная идея.Ваша таблица beer_distributor - это то, что известно как таблица соединений .JOINs и ключи / индексы используются вместе.Система баз данных использует ключи для быстрой и эффективной работы JOIN.Вы используете эту соединительную таблицу, СОЕДИНЯЯ к ней таблицы beer и distributor.

И ваша соединительная таблица должна иметь первичный ключ, охватывающий оба столбца (индекс нескольких столбцов / «составной индекс»), как это выглядит, если я правильно понимаю эту диаграмму.В таком случае это выглядит хорошо для меня.Отлично сделано.

2 голосов
/ 28 апреля 2011

Я бы поместил первичный ключ в таблицу соединений beer_distributor, а не двойной первичный ключ двух внешних ключей.ИМО, это облегчает жизнь, поддерживая отношения.

ОБНОВЛЕНИЕ

Чтобы подчеркнуть этот момент, рассмотрите необходимость замены дистрибьютора ACOO9 для пива 163.С двойным первичным ключом вам нужно будет удалить, затем снова вставить ИЛИ знать оба существующих значения, чтобы обновить запись.С отдельным первичным ключом вы просто обновите запись, используя это значение.Полезно при создании приложений поверх этих данных.Если это строго хранилище данных, то двойной первичный ключ может иметь больше смысла с точки зрения администратора баз данных.

UPDATE beer_distributor SET distributor_id = XXXXX WHERE beer_id = 163 AND distributor_id = AC009

против

UPDATE beer_distributor SET distributor_id = XXXXX WHERE id = 1234
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...