Лучшие практики СУБД - автоид для таблицы ассоциаций? - PullRequest
2 голосов
/ 08 июля 2011

У меня есть две таблицы, скажем, они называются таблицей A и таблицей B. Элемент из таблицы B может присутствовать в нескольких экземплярах A, и каждая A может содержать несколько B, поэтому у меня есть таблица с именем a_b, которая связывает их вместе их первичными ключами. Мой вопрос: когда я определяю эту таблицу ассоциации, должен ли я иметь первичный ключ в таблице ассоциации? Или это не нужно? Просто пытаюсь избежать попадания в TDWTF, вот и все:)

Ответы [ 4 ]

2 голосов
/ 08 июля 2011

Я думаю, вы можете использовать первичный ключ, чтобы показать свое намерение.Например, если вы не хотите
a, b
a, b
, то первичный ключ, определенный для Aa и Bb, сделает это более понятным.Если вас это не волнует, но у вас есть поля a, b и другие, добавление суррогатного ключа в качестве первичного ключа может помочь вам предоставить единый способ удаления ненужной строки.В противном случае вам придется удалить, где a = a и b = b и ??затем выберите значение поля из строки, которую вы хотите удалить.Тогда как с помощью суррогатного ключа вы можете просто выбрать строку и сказать «удалить», где mykey = 36 или что-то в этом роде ...

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

Я бы сказал, что определенно делать вседелает ваши намерения наиболее ясными.

2 голосов
/ 08 июля 2011

Первичный ключ будет находиться в столбце PK таблицы и столбце PK таблицы B в вашей таблице сопоставления. Таким образом, вы гарантируете, что не получите никаких повторяющихся строк в своей таблице ассоциации случайно.

Одна из основных целей первичных ключей - гарантировать ссылочную целостность. То есть храните данные в вашей таблице в чистоте, без дубликатов. В этом случае PK гарантирует, что в таблице сопоставлений никогда не будет 2 повторяющихся строк.

0 голосов
/ 08 июля 2011

Первичный ключ нужен всегда.

Однако я бы сказал, что это зависит от того, каким он должен быть.Если вы собираетесь использовать какие-либо системы ORM (например, Hibernate), то лучше иметь суррогатный идентификатор, тогда как эти два внешних ключа (указывающие на таблицы A и B) должны образовывать уникальный индекс.

Кроме того, если когда-либо возникнет необходимость ссылаться на такие отношения из другой таблицы, этот суррогатный идентификатор будет действительно полезен.

0 голосов
/ 08 июля 2011

Не требуется. Оба ключа должны сформировать первичный ключ вашей таблицы ассоциации. Если вы собираетесь выполнять двунаправленную навигацию, рассмотрите возможность добавления индекса с переставленными клавишами.

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