对不起,我对如何为我的调查问卷制作数据库感到困惑;它将成为其中一个问卷,其中在randon中挑选出一些问题,并在其旁边显示可能的答案,其中每个答案的权重都在最后计算。
所以我有3张桌子:问题,答案和体重
重量有一对多的答案,因为每个答案都会有一个重量加到最终得分。
令我困惑的是如何摆脱问题和答案之间的多对多关系,因为一个问题将有许多可能的答案,并且在许多问题中将使用相同的答案,即是/否。
答案 0 :(得分:4)
我建议使用以下结构:
(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)
您有两种选择:
不要摆脱多对多。它不会伤害你。
有“每个问题的答案”。例如。答案表有“question_id,answer,weight”列。 (据我所知,由于重量是perl的回答/问题,你不需要一张海水重量表)。主键是“question_id + answer”
是的,第二个设计被去规范化 - 你将存储几个不同的“是”答案副本。
但这并没有什么大的损失(在这个特定情况下的参照完整性不是一个大问题(例如“保持所有”是“字符串相同”);空间问题很小 - 无论如何,大答案往往是独特的,对于小答案,通过存储“是”问题的ID与字符串“是”,您不会节省太多空间。
我的建议是第二种设计 - 它对于编写代码和维护更简单,并且尽管在理论上被非规范化,但没有大的缺点
答案 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
许多答案的一个重量,许多问题的一个答案