MySQL:只存储1个正确答案(索引)

时间:2016-03-10 12:48:37

标签: mysql sql indexing

我有2个表:questionsanswers,每个问题都有4个选项,只有1个选项是正确的。

有没有办法强制answers表只接受每个问题的1个正确的替代方案,(比如唯一索引)?

answers表设计示例:

id    question_id    is_correct    text
0         1            true        blue1
1         1            false       blue2
2         1            false       blue3
3         1            false       blue4
4         2            true        blue5
5         2            false       blue6
6         2            false       blue7
7         2            false       blue8
8         3            true        blue9
9         3            false       blue10

告诉DB只能为question_id = 1 ...等存储1个正确答案吗?

感谢,

3 个答案:

答案 0 :(得分:3)

没有触发器的一种方法是将信息存储在Questions表而不是Answers表中。

您可以只包含一个与CorrectAnswerId表具有外键关系的列Answers

答案 1 :(得分:0)

由于您只想允许一个正确的答案,您可以将设计改为这个方向。

您可以删除列" is_correct"来自"答案"表并添加一列" correct_answer_id"问题"问题"表。 因此,根据定义,对于每个问题,您只有一个正确的答案。

这种设计具有明显的优势,可以轻松实施所要求的限制,因为它不能支持多个正确答案。

答案 2 :(得分:0)

2张表:

  • 2列和PRIMARY KEY(question_id, correct_answer_id)。 PK会阻止两个正确答案。

  • 您当前的表格,但没有is_correct列。

如果您需要JOIN作为'正确答案',则text可以{{1}}。