问卷db结构

时间:2011-02-15 18:07:06

标签: mysql entity-relationship

对不起,我对如何为我的调查问卷制作数据库感到困惑;它将成为其中一个问卷,其中在randon中挑选出一些问题,并在其旁边显示可能的答案,其中每个答案的权重都在最后计算。

所以我有3张桌子:问题,答案和体重

重量有一对多的答案,因为每个答案都会有一个重量加到最终得分。

令我困惑的是如何摆脱问题和答案之间的多对多关系,因为一个问题将有许多可能的答案,并且在许多问题中将使用相同的答案,即是/否。

3 个答案:

答案 0 :(得分:4)

我建议使用以下结构:

  • 问题
    • 有0:n回答
    • 属性:id(int PK),question(text)
  • 答案
    • 有1个问题
    • 有0:n回复
    • 属性:id(int PK),answer(text),question id(int FK)
  • 响应
    • 有1个回答
    • (通过回答有1个问题)
    • 有1个响应者(用户)
    • 属性:id(int PK),answer id(int FK),用户id(int FK)
  • 用户
    • 有0:n回复
    • attributes:id(int PK)+您需要存储的关于用户的任何其他内容

(PK =主键,FK =外键)

weight存储为问题或答案的属性。你还没有真正描述weight是什么,所以很难说。


这是一个问题的记录,有人回答了这个问题。在这个例子中,Jean Luc Picard被问到“有多少盏灯?”可能的答案,“3”,“4”和“5”。当然,他选择“4”,其中没有任何weight(“5”是正确答案)。

Question: (QID=1, Question="How many lights?")
Answer: (AID=1, QID=1, Answer="3", Weight=0)
Answer: (AID=2, QID=1, Answer="4", Weight=0)
Answer: (AID=3, QID=1, Answer="5", Weight=1)
Response: (RID=1, AID=2, UID=1)
User: (UID=1, Name="Jean Luc Picard", ...)

答案 1 :(得分:1)

您有两种选择:

  1. 不要摆脱多对多。它不会伤害你。

  2. 有“每个问题的答案”。例如。答案表有“question_id,answer,weight”列。 (据我所知,由于重量是perl的回答/问题,你不需要一张海水重量表)。主键是“question_id + answer”

    是的,第二个设计被去规范化 - 你将存储几个不同的“是”答案副本。

    但这并没有什么大的损失(在这个特定情况下的参照完整性不是一个大问题(例如“保持所有”是“字符串相同”);空间问题很小 - 无论如何,大答案往往是独特的,对于小答案,通过存储“是”问题的ID与字符串“是”,您不会节省太多空间。

  3. 我的建议是第二种设计 - 它对于编写代码和维护更简单,并且尽管在理论上被非规范化,但没有大的缺点

答案 2 :(得分:0)

@wuputah权重是一个问题值得选择的点。

我决定用一张表来获得相同重量的答案,即tblBooleanAnswerYes,tblBooleanAnswerNo,tblTextAnswer1pt,tblTextAnswer2pt(id,text,weightID *)

有两个问题表tblBooleanQuestion(id,booleanAnswerYesID *,booleanAnswerNoID *),tblTextQeestion(id,text,textAnswer1ptID *,textAnswer2ptID *,textAnswer3ptID * etc)

tblWeight -< tblBooleanAnswerYes -< tblBooleanQuestion
      \  \_< tblBooleanAnswerNo  ___v
       \
        \ -< tblTextAnswer1pt    -< tblTextQuestion
         \_< tblTextAnswer2pt    ___v

许多答案的一个重量,许多问题的一个答案