gpt4 book ai didi

mysql - 如何编写处理多个字段的外键约束

转载 作者:搜寻专家 更新时间:2023-10-30 21:51:58 25 4
gpt4 key购买 nike

问题

我想为 Answer 表做的 foreign keys 的设置是否是正确的想法以及如何在处理多个字段的 Add foreign key constraint 上编写 SQL?

session 表:

SessionId (PK) SessionName
1 AAA
2 AAB

问题表:

QuestionId(PK)  SessionId(PK)  QuestionContent
1 1 What is 2+2?
2 1 What is 3+3?
1 2 What is 4+4?
2 2 What is 5+5?

答题表:

AnswerId(auto, PK)  QuestionId(fk)  SessionId(fk)  Answer
1 1 1 A
2 1 1 D
3 2 1 C
4 2 1 A
5 1 2 True
6 2 2 A
7 2 2 B

现在我遇到的问题是 Answer 表的外键,我想知道哪个外键是正确的。

我所做的是向 SessionId 添加一个外键,这意味着如果我单击一行的 SessionId,它会匹配 SessionIdSession 表中。

然后我想我会在 Answer 表中的 QuestionId 上提供一个外键链接到 Question 表。问题是,如果我在一行中单击 QuestionId,那么它会显示 QuestionId 中包含相同 QuestionId 的所有行。所以如果我想查找这个 Answer:

AnswerId(auto, PK)  QuestionId(fk)  SessionId(fk)  Answer
1 1 1 A

当我点击上面的 QuestionId 外键时,它会在下面输出:

QuestionId(PK)  SessionId(PK)  QuestionContent
1 1 What is 2+2?
1 2 What is 4+4?

答案不属于这两个问题,它只属于一个问题,但是因为两个QuestionId 相同,所以显示两个问题。

所以我在想的是,我想要一个外键约束,如果用户连续点击 QuestionId,它将同时查找 QuestionIdSessionId 以便它知道答案所属的问题和 session (考试),以便它在下面输出:

QuestionId(PK)  SessionId(PK)  QuestionContent
1 1 What is 2+2?

我的问题是我不知道如何编写处理两个字段的外键约束?另外,SessionIdSessionId 和 QuestionId 的外键设置是否正确?

最佳答案

您可以使用以下语法为 Answers 表创建复合外键:

FOREIGN KEY (QuestionId, SessionId) REFERENCES Questions (QuestionId, SessionId)

但是,Questions 表的 SessionId 列是复合主键的一部分似乎很奇怪,考虑到您有一个 Sessions 表使用该名称的列作为主键。您可能应该考虑将 Questions.SessionId 作为 Sessions 表上的外键,并将 QuestionId 设为标准的单一主键。

如果这样做,您会发现 Answers 表中不需要 SessionId 列。

下面是您可以执行的操作的示例:

-- Sessions table
SessionId (PK) | SessionName

-- Questions table
QuestionId (PK) | SessionId (FK) | QuestionContent

-- Answers table
AnswerId (PK) | QuestionId (FK) | Answer

关于mysql - 如何编写处理多个字段的外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14178576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com