Внешний ключ в составном первичном ключе - PullRequest
1 голос
/ 05 января 2012

У меня есть следующие 3 таблицы:

TBLA

ID - PK
name

TBLB

ID - PK
tblAID - FK references tblA.ID
pkID2

tblC

ID - PK
tblAID *
fkID2 *
...

Я хочу сделать этот кортеж FK из (tblB.tblAID, tblB.pkID2)

Если я сделаю это:

alter table tblC with check 
add constraint FK_tblC_tblB 
foreign key (tblAID, fkID2) 
references tblB (tblAID, pkID2)

Я получаю сообщение об ошибке:

В ссылочной таблице tblB нет первичных ключей или ключей-кандидатов. которые соответствуют списку ссылающихся столбцов во внешнем ключе 'FK_tblC_tblB'

Т.е.: я хочу убедиться, что пара кортежей, вставленная в tblC, существует в tblB. Но я не могу этого сделать, поскольку pkID2 не является ключом. Действительно tblB может иметь tblAID, pkID2 в качестве составного первичного ключа. Но тогда tblAID все равно должен быть FK tblA.ID.

1 Ответ

5 голосов
/ 05 января 2012

Действительно, tblB может иметь tblAID, pkID2 в качестве составного первичного ключа.

Или создать новый уникальный ключ из этих двух полей.Внешний ключ не должен ссылаться на первичный ключ.

Но тогда tblAID все равно должен быть FK для tblA.ID.

Это все равно будет работать,Столбец в первичном или уникальном ключе также может участвовать в других ограничениях, включая ограничения внешнего ключа.

...