【发布时间】:2019-09-29 21:36:42
【问题描述】:
假设我有以下表格:
问题、选择、答案
每个问题都有很多选择(选择有一个question_id 外键。)
Answers 表有两个外键 question_id 和 choice_id,这些约束阻止了引用不存在的 question 或 choice 的答案,但我想阻止 invalid em> 也有选择。
我如何表达一个约束(也许这不是正确的词),它只允许choice_id 是给定question_id 的有效选择的答案?例如,如果我有 2 个问题,每个问题有 2 个选项:
- 第一季度(ID = 1)
- A (id = 1)
- B (id = 2)
- Q2 (id = 2)
- C (id = 3)
- D (id = 4)
我想允许像 (question_id = 1, choice_id = 1 (或 2)) 这样的答案,并阻止像 (question_id = 1, choice_id = 4) 这样的答案,因为这不是一个有效的选择问题。
【问题讨论】:
-
我很难理解选择和答案之间的区别。回答是用户对问题的选择吗?
-
是的,也许他们可以使用更好的名称,但“答案”是用户提交的内容,“选择”是问题的有效选项(多选题)。有更好的名字的想法吗?
-
在我看来,选项有两种不同的识别方式,choiceId 在所有问题的所有选项中都是唯一的,考生看到的选项编号为 1所有问题都通过 5。你需要注意不要混淆这两个,否则你永远不会得到正确的外键约束。
-
@WalterMitty 确实!我需要小心这一点。我在几个表上存储了一个“订单”属性,以跟踪它们在每个问题中的索引。
标签: sql postgresql database-design foreign-keys many-to-many