【问题标题】:How to combine fields in foreign key constraint如何在外键约束中组合字段
【发布时间】:2026-02-14 11:20:07
【问题描述】:

问题表:

QuestionId (PK)  QuestionNo  QuestionContent SessionId
11               1           blah            4
12               2           blah blah       4
13               1           BLAH            5
14               2           BLAH BLAH       5

Image_Question 表:

Image_QuestionId (PK) ImageId (FK) SessionId (FK) QuestionNo
4                     6              4              1

会话表:

SessionId SessionName
4         DFOFK
5         FEOWF

上面有三张桌子。现在,如果您查看Image Question 表中的SessionId,它是Session 表的外键,因此如果我单击Image_Question 表中的SessionId 值,它将显示@来自Session 表的 987654329@ 详细信息。

现在我在Image Question 表中有另一列尚未分配外键,即QuestionNo 字段。现在这不是任何表中的主键,但我需要使用此字段才能知道图像属于哪个问题。无论如何,这不是问题。

我的问题是,如果我只是将Image_Question 表中的QuestionNo 设置为FK,那么如果我单击Image_Question 表中的QuestionNo's 值,那么它将显示所有@987654338 @ 在所有会话中都是 1。我不想要这个,我想在问题号所属的SessionId 中查找QuestionNo

所以我的问题是如何在 SQL 中设置 QuestionNo 外键,以便将 SessionIdQuestionNo 字段连接在一起,从而创建唯一的 SessionId/QuestionNo 约束。

【问题讨论】:

  • 那么为什么不在 image_question 中使用 questionID 而不是 questionNo?这样就不会有歧义了
  • @WKordos 所说的。 QuestionNo 不是候选键。使用QuestionId
  • 你不应该也不能这样做。除此之外,这就是 questionid 的用途
  • 在 Image_Question 中包含 QuestionNo 会使您的架构非规范化。
  • 大家好,我不能使用 questionId 的原因是用户创建问题,现在他们在创建问题时上传图像。问题仅在提交后插入数据库,但图像文件的上传发生在提交之前。我在网页中使用问题编号来确定每个图像属于哪些问题,就像我说的我不能使用 questionid 来执行此操作,因为尚未插入问题

标签: mysql sql database foreign-key-relationship


【解决方案1】:

使用图像,您知道 SessionId 和 QuestionId,因此您可以先输入一个 NULL 问题,然后获取 QuestionId 并在您的图像表中使用它。获得问题信息后,您可以更新问题表。

但是,这不是一个好习惯。

在您提交问题之前,您不应该将图像提交给问题,这些应该保留在您的业务层中,直到您获得全部信息 - 然后将它们提交到永久 ant 存储。

【讨论】: