Объединяющая таблица (таблица ассоциации) имеют первичный ключ? многие многим отношения. Я видел некоторые Объединяющие таблицы с первичным ключом, и некоторые без кого-то могут объяснить, когда у Вас был бы первичный ключ в объединяющей таблице и почему?
Заранее спасибо;-)
В чистой таблице соединений или соединений все поля будут частью первичного ключа. Например, давайте рассмотрим следующие таблицы:
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));
Иногда вы обнаружите необходимость добавить неосновной столбец в таблицу соединений, но я нахожу это относительно редко.
Делитесь и наслаждайтесь.
Все таблицы должны иметь первичный ключ. : -)
Вы можете использовать составной внешний ключ или слепой целочисленный ключ.
Вы могли бы использовать составной внешний ключ, когда в вашей таблице ассоциаций нет других элементов.
Вы можете использовать слепой целочисленный ключ, когда таблица ассоциации имеет собственные элементы. Составной внешний ключ будет определяться двумя дополнительными индексами.
Таблицы отношений часто имеют три ключей-кандидатов, один из которые не обязательно должны быть наложены ограничением, и выбор того, какой ключ (если есть) должен быть «первичным», является произвольным.
Рассмотрим этот пример из Джо Селко :
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 не всегда соответствие. Многие продукты делают предположение, что
ПЕРВИЧНЫЙ КЛЮЧ
находится в каким-то образом особенным в модели данных и будет способ получить доступ к таблице большую часть времени.
... ОДНАКО я подозреваю, что ваш вопрос подразумевает нечто большее вроде: «Предполагая, что я из тех, кто избегает естественных ключей в пользу искусственных идентификаторов, должен ли я добавить искусственный идентификатор в таблицу, полностью состоящую из искусственные идентификаторы, на которые есть ссылки из других таблиц? "
Это зависит от записей, которые вы связываете. Вы можете создать составной первичный ключ для идентификаторов связанных записей, если вам не нужно несколько записей для каждой ассоциации.
Однако гораздо важнее убедиться, что оба этих столбца проиндексированы и имеют определенную ссылочную целостность.