对不起,我对自己的调查问卷如何制作db有点困惑;它将成为那些在randon挑选了几个问题的问卷中的一个,在他们旁边显示可能的答案,其中每个答案都具有在最后计算的权重。调查问卷db结构
所以我得到了3个表:问题,答案和重量
重量有一个一对多与答案,因为每个答案都会有一个权重被添加到最后的比分。
这让我很困惑的事情是如何摆脱问题和答案之间的多对多关系,因为一个问题将有许多可能的答案,并且相同的答案,即是/否将用于许多问题。
对不起,我对自己的调查问卷如何制作db有点困惑;它将成为那些在randon挑选了几个问题的问卷中的一个,在他们旁边显示可能的答案,其中每个答案都具有在最后计算的权重。调查问卷db结构
所以我得到了3个表:问题,答案和重量
重量有一个一对多与答案,因为每个答案都会有一个权重被添加到最后的比分。
这让我很困惑的事情是如何摆脱问题和答案之间的多对多关系,因为一个问题将有许多可能的答案,并且相同的答案,即是/否将用于许多问题。
我建议以下结构:
(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", ...)
你有两个选择:
不要摆脱许多一对多。它并没有伤害你。
有“每个问题的回答”。例如。答案表中有栏目“question_id,answer,weight”。 (据我所知,因为体重是perl的答案/问题,所以你不需要一个seaparate体重表)。主键是“question_id + answer”
是的,这第二个设计是非标准化 - 您将存储几个不同的“是”答案的副本。但是这并没有什么大的损失(在这种特殊情况下,参考完整性并不是一个大问题(例如“保持所有”是“字符串一致);空间问题是最小的 - 无论如何,对于小问题,大回答往往是唯一的,通过存储“是”问题的ID与字符串“是”不存储太多空间。
我的建议是第二设计 - 这既是编写代码反对,维护简单,没有大的缺点,尽管在理论上被规格化
@wuputah重量是选择的问题值得点。
我决定和一张桌子一起去找相同重量的答案,tblBooleanAnswerYes,tblBooleanAnswerNo,tblTextAnswer1pt,tblTextAnswer2pt(ID,文本,weightID *)
有两个问题表tblBooleanQuestion(ID,booleanAnswerYesID *,booleanAnswerNoID *),tblTextQeestion(ID,文字,textAnswer1ptID *,textAnswer2ptID *,textAnswer3ptID *等)
tblWeight -< tblBooleanAnswerYes -< tblBooleanQuestion
\ \_< tblBooleanAnswerNo ___v
\
\ -< tblTextAnswer1pt -< tblTextQuestion
\_< tblTextAnswer2pt ___v
一重了很多答案,一个答案很多问题
重量应存放有答案呢?我不明白为什么它会是一个单独的表格。您将所有答案属性解除规范化为问题,这只会导致问题。我不会推荐你已经布置的结构。 – wuputah 2011-02-18 07:37:13