什么是创建此数据库的最佳方法

时间:2010-01-29 13:46:01

标签: sql mysql database database-design

为问题和答案脚本创建数据库的最佳方法是什么

用户可以提交一个问题,其中包含一组正确答案存在的选择

数据库必须保存问题,所有选择和正确的答案。

我想到的最好方法就是制作两张桌子:

问题表:

  • ID
  • 问题
  • Right_Answer_ID

选择表:

  • ID
  • 选择
  • Question_ID

我正在使用PHP和MYSQL,所以如果我使用这种方式将信息插入我的数据库会有点困难,因为我必须插入问题并插入所有选项并采取正确的选择ID修改Right_Answer_ID字段到该ID,这是一个漫长的过程,我确信有更好的方法来实现这一点,请帮助。

由于

6 个答案:

答案 0 :(得分:4)

这个怎么样?

<强>问题

  • ID
  • 问题

<强>选择

  • ID
  • Question_ID
  • 选择
  • Is_Right_Answer

答案 1 :(得分:1)

让我想起Joseph Heller的Catch-22 ......

First edition book cover

与书不同,存在一个真正的漏洞:
简单的方法是生成自己的ID,而不是依赖于自动递增的和其他SQL提供的ID。

这就是说,除了提醒应用程序生成的密钥和标识符有时优于系统提供的对应项,它也是 a反思数据库设计的好机会 例如Jeff的答案,建议将“正确响应”信息从Questions表中的“Right_Answer_ID”列移动到Responses表中的“IsCorrect”列,不仅解决了INSERT循环引用问题,还引入了更多样化的数据model:我们可能对给定问题有多个正确答案(或者可能通过将“IsCorrect”改为排序的数值,其中一个响应可能在滑动标度上“正确”)

答案 2 :(得分:0)

如果选择的数量是可变的,这看起来是最好的方法 - 它被正确地规范化并且易于查询。插入选项的额外for循环不会让你失望。您甚至可以为所有选项构建单个查询并执行一次。

答案 3 :(得分:0)

你的设计是一个很好的启动,但是如果问题有多个正确答案,即使现在情况不是这样,但应用程序往往会发展。这将导致杰夫的回答,以及mjv为保存价值所带来的问题。

因此,当只在问题表中保存“ID”和“问题”时,您可以使用该question_id保存选项,并且在保存选项和更新时无需获取正确答案的ID问题表。

答案 4 :(得分:0)

如果选择的数量是变量或将来可能会改变,那么您提出的设计是正确的方法。如果选择的数量不会改变,那么我会说只有一个表id, question, choice1, choice2, ...., choicen, correct_choice作为其中的字段就足够了。

答案 5 :(得分:0)

如果您有两个表,则必须有两个插入查询。您可以按照以下设计避免上次更新查询:

问题表:

* ID
* Question
* Right_Answer_Index

选择表:

* Index
* Question_ID
* Choice

如果您需要在选择表上拥有主键,则可以将Index与Question_ID结合使用。这样,在用于创建新问题和答案的html表单中,您可以有一个额外的输入来指示正确选择的索引号,因此当您插入问题时,您将获得所需的所有信息(在正确之前)选择记录已添加)。