Составной первичный ключ как внешний ключ MySQL - PullRequest
0 голосов
/ 28 июня 2018

у меня есть стол

TABLE PARTECIPATION
(PARTY_ID INT,
GUEST ...
PRIMARY KEY(PARTY_ID, GUEST)
FOREIGN KEY(PARTY_ID) REFERENCES PARTY(ID)
FOREIGN KEY(GUEST) REFERENCES GUEST(GUEST)
)

и стол гостей

TABLE GUEST
(NAME VARCHAR(20),
SURNAME VARCHAR(20),
AGE INT,

PRIMARY KEY(NAME, SURNAME)
)

Теперь, как я могу установить элемент GUEST УЧАСТИЯ в качестве ИНОСТРАННЫХ КЛЮЧЕВОЙ ССЫЛКИ на GUEST TABLE?

Должен ли я создать столбец в GUEST с именем idk, ID и установить его в качестве первичного ключа? Или я могу сделать что-то вроде этого:

TABLE PARTECIPATION
(PARTY_ID INT,
GUEST_NAME VARCHAR(20),
GUEST_SURNAME VARCHAR(20)
PRIMARY KEY(PARTY_ID, GUEST_NAME, GUEST_SURNAME)
FOREIGN KEY(PARTY_ID) REFERENCES PARTY(ID),
FOREIGN KEY(GUEST_NAME) REFERENCES GUEST(NAME),
FOREIGN KEY(GUEST_SURNAME) REFERENCES GUEST(SURNAME))

1 Ответ

0 голосов
/ 28 июня 2018

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

TABLE PARTECIPATION
(PARTY_ID INT,
GUEST_NAME VARCHAR(20),
GUEST_SURNAME VARCHAR(20)
PRIMARY KEY(PARTY_ID, GUEST_NAME, GUEST_SURNAME)
FOREIGN KEY(PARTY_ID) REFERENCES PARTY(ID),
FOREIGN KEY(GUEST_NAME, GUEST_SURNAME) REFERENCES GUEST(NAME, SURNAME))
...