Объединяющая таблица (таблица ассоциации) имеют первичный ключ? многие многим отношения

Объединяющая таблица (таблица ассоциации) имеют первичный ключ? многие многим отношения. Я видел некоторые Объединяющие таблицы с первичным ключом, и некоторые без кого-то могут объяснить, когда у Вас был бы первичный ключ в объединяющей таблице и почему?

Заранее спасибо;-)

5
задан Imran 22 June 2010 в 10:58
поделиться

4 ответа

В чистой таблице соединений или соединений все поля будут частью первичного ключа. Например, давайте рассмотрим следующие таблицы:

CREATE TABLE USERS
  (ID_USER NUMBER PRIMARY KEY,
   FIRST_NAME VARCHAR2(32),
   LAST_NAME VARCHAR2(32));

CREATE TABLE ATTRIBUTES
  (ID_ATTRIBUTE NUMBER PRIMARY KEY,
   ATTRIBUTE_NAME  VARCHAR2(64));

Таблица соединений между ними, чтобы позволить многим пользователям иметь много атрибутов, будет

CREATE TABLE USER_ATTRIBUTES
  (ID_USER NUMBER REFERENCES USERS(ID_USER),
   ID_ATTRIBUTE NUMBER REFERENCES ATTRIBUTES(ID_ATTRIBUTE),
   PRIMARY KEY(ID_USER, ID_ATTRIBUTE));

Иногда вы обнаружите необходимость добавить неосновной столбец в таблицу соединений, но я нахожу это относительно редко.

Делитесь и наслаждайтесь.

6
ответ дан 13 December 2019 в 22:01
поделиться

Все таблицы должны иметь первичный ключ. : -)

Вы можете использовать составной внешний ключ или слепой целочисленный ключ.

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

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

4
ответ дан 13 December 2019 в 22:01
поделиться

Таблицы отношений часто имеют три ключей-кандидатов, один из которые не обязательно должны быть наложены ограничением, и выбор того, какой ключ (если есть) должен быть «первичным», является произвольным.

Рассмотрим этот пример из Джо Селко :

CREATE TABLE Couples
(boy_name INTEGER NOT NULL UNIQUE -- nested key
REFERENCES Boys (boy_name),
girl_name INTEGER NOT NULL UNIQUE -- nested key,
REFERENCES Girls(girl_name),
PRIMARY KEY(boy_name, girl_name)); -- compound key

Таблица «Пары» позволяет вам вставить эти строки из исходного набора:

 ('Джо Селко', 'Брук Шилдс')
('Алек Болдуин', 'Ким Бассинджер')

Задумайтесь на минуту об этой таблице. ПЕРВИЧНЫЙ КЛЮЧ теперь избыточен. Если каждый мальчик появляется только один раз в стол и каждая девушка появляется только один раз в таблице, затем каждый (boy_name, girl_name) пара может появиться только один раз.

С теоретической точки зрения я мог отбросьте составной ключ и сделайте либо boy_name или girl_name новый первичный ключ, или я мог бы просто оставить их как ключи-кандидаты.

Продукты и теория SQL не всегда соответствие. Многие продукты делают предположение, что ПЕРВИЧНЫЙ КЛЮЧ находится в каким-то образом особенным в модели данных и будет способ получить доступ к таблице большую часть времени.

... ОДНАКО я подозреваю, что ваш вопрос подразумевает нечто большее вроде: «Предполагая, что я из тех, кто избегает естественных ключей в пользу искусственных идентификаторов, должен ли я добавить искусственный идентификатор в таблицу, полностью состоящую из искусственные идентификаторы, на которые есть ссылки из других таблиц? "

0
ответ дан 13 December 2019 в 22:01
поделиться

Это зависит от записей, которые вы связываете. Вы можете создать составной первичный ключ для идентификаторов связанных записей, если вам не нужно несколько записей для каждой ассоциации.

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

0
ответ дан 13 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: