mysql - MySQL 复合主键作为外键

标签 mysql foreign-keys primary-key rdbms composite-primary-key

我有一张 table

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 客人

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

PRIMARY KEY(NAME, SURNAME)
)

现在,如何将 PARTECIPATION 的 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))

最佳答案

外键必须与其引用的主键具有相同的列数和相同的顺序。这意味着如果 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))

关于mysql - MySQL 复合主键作为外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51085174/

相关文章:

mysql - MySQL可以通过比较函数排序吗?

php - 放在服务器上后更新单条记录解析错误?

mysql - 在创建 ER 图期间何时应用标准化原则

mysql - 在没有主键时检测相同的行

python - 为什么 SQLite 会插入重复的复合主键?

php - SQL 从多个表中选择 *

php - 使用条件语句在多个表上使用左连接

mysql - 更新 INNER JOIN 中的字段

MySql 5.6.17 错误 #1215 - 无法添加外键约束

sql-server-2008 - 将主键添加到具有现有聚集索引的表