我正在为一个简单的测验应用程序设计模式。它有 2 个表 - “问题”和“答案选择”。问题表具有“问题 ID”、“问题文本”和“答案 ID”列。“答案选择”表有“问题 ID”、“答案 ID”和“答案文本”列。有了这个简单的模式,很明显一个问题可以有多个答案选择,因此需要答案选择表。但是,一个问题只能有一个正确答案,因此需要在问题表中提供“答案 ID”。但是,问题表中的这个“答案 ID”列提供了一种错觉,好像一个不正确的答案可能有多个问题。消除这种错觉的另一种替代方法是使用另一个表仅用于正确答案,该表只有 2 列,即问题 ID 和答案 ID,两个表之间具有 1-1 关系。但是,我认为这是多余的。关于如何最好地设计这个从而强制执行一个问题可以有多个答案选择但只有一个正确答案的规则的任何建议?非常感谢。
4 回答
丢失表中的AnswerID
列Question
。您正在创建一个(某种)循环引用。相反,在表中有一个IsCorrect
位(布尔)列Answer
。如果您需要该设施,这也将使您在将来获得多个正确答案的灵活性。
根据 Matti 的观点,答案记录的插入/更新触发器将强制执行每个问题规则的零或一个正确答案。
只是命名列CorrectAnswerId
怎么样?我怀疑有人会将其误认为是其他任何事情。
三张表(因为您可以有很多“是”“否”,为什么要复制它,并且您可以稍后轻松地将“否”更改为“否”)。该questions_answers
表将映射一些问题的一些答案。(这是多对多的关系)。
问题:
- ID
- 描述
- 正确答案ID
答案:
- ID
- 描述
问题和答案:
- question_id
- answer_id
问题
- id
- question_text
1、“左还是右?”
answer_choices
- id
- question_id
- answer_text
- 正确
1, 1, "左", 1 2, 1, “正确”, 0
答案
- id
- question_id
- user_id
- answer_choices_id
1, 1, 1234, 2 // 错误! 1, 1, 5678, 1 // 是的
所以,基本上你首先从表中查询问题questions
,然后从answer_choices
表中查询链接到问题的可能答案question_id
。给出答案后,您选择所选answer_choices_id
内容并对照表格检查它answer_choices
是否correct
为 1 或 0。