数据库设计 - 表关系问题

时间:2010-05-18 22:17:34

标签: database-design database-schema

我正在为简单的测验应用程序设计模式。它有2个表 - “问题”和“答案选择”。问题表有“问题ID”,“问题文本”和“答案ID”列。 “答案选择”表格包含“问题ID”,“答案ID”和“答案文本”列。通过这种简单的模式,很明显,一个问题可以有多个答案选项。因此需要答案选择表。但是,问题只能有一个正确答案,因此需要问题表中的“答案ID”。但是,问题表中的“答案ID”列提供了一种错觉,好像单个答案可能有多个问题是不正确的。消除这种错觉的另一种方法是使另一个表只是为了正确答案,只有2列,即问题ID和答案ID,两个表之间有1-1关系。但是,我认为这是多余的。关于如何最好地设计这一点的任何建议从而强制执行一个问题可以有多个答案选择但只有一个正确答案的规则?非常感谢。

4 个答案:

答案 0 :(得分:2)

AnswerID表中丢失Question列。你正在创建一个(排序)循环引用。相反,在IsCorrect表中有一个Answer位(布尔)列。如果您需要该设施,这也可以让您灵活地在将来获得多个正确的答案。

根据Matti的观点,应答记录的INSERT / UPDATE触发器将强制执行每个问题规则的零或一个正确答案。

答案 1 :(得分:2)

如何命名列CorrectAnswerId?我怀疑有人会误以为其他任何事情。

答案 2 :(得分:0)

三个表(因为你可以有很多“是”“否”,为什么重复这个,你可以稍后将“否”更改为“Nop”)。 questions_answers表格会映射一些问题的答案。 (这是多对多的关系)。

的问题:

  • ID
  • 描述
  • correct_answer_id

答案:

  • ID
  • 描述

questions_answers:

  • question_id
  • answer_id

答案 3 :(得分:0)

<强>问题
- id
- question_text

1, "left or right?"

<强> answer_choices
- id
- question_id
- answer_text
- 正确

1, 1, "left", 1
2, 1, "right", 0

<强>答案
- id
- question_id
- user_id
- answer_choices_id

1, 1, 1234, 2 // wrong!
1, 1, 5678, 1 // yay

因此,基本上您首先从questions表中查询问题,然后通过answer_choices查询question_id表中与问题相关联的可能答案。在给出答案后,您将选择answer_choices_id并在answer_choices表格中进行检查,以查看correct是1还是0。