Таблицы отношений часто имеют три ключа-кандидата, один из которых не обязательно должен быть принудительно установлен с ограничением, и выбор того, какой ключ (если есть) должен быть «первичным», является произвольным.
Рассмотрим этот пример из Джо Селко :
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
Таблица «Пары» позволяет вставлять эти строки из исходного набора:
('Joe Celko', 'Brooke Shields')
('Alec Baldwin', 'Kim Bassinger')
Подумайте об этом столе на минуту.PRIMARY KEY
теперь избыточен.Если каждый мальчик появляется только один раз в таблице, а каждая девушка появляется только один раз в таблице, то каждая пара (boy_name, girl_name) может появляться только один раз.
С теоретической точки зрения я мог бы отбросить составной ключ исделайте новый первичный ключ либо boy_name, либо girl_name, либо я могу просто оставить их в качестве ключей-кандидатов.
Продукты и теория SQL не всегда совпадают.Многие продукты предполагают, что PRIMARY KEY
каким-то образом является особенным в модели данных и будет являться способом доступа к таблице большую часть времени.
... ОДНАКО я подозреваю, что вы задаете вопросподразумевает что-то вроде: «Предполагая, что я такой человек, который избегает естественных ключей в пользу искусственных идентификаторов, я должен добавить искусственный идентификатор к таблице, которая полностью состоит из искусственных идентификаторов, на которые ссылаются другие таблицы?»