我的问卷调查数据库有些问题

时间:2013-11-30 16:33:58

标签: sql-server

我的调查问卷应用程序的某些表格有点麻烦。

这笔交易是有些问题只有一个跟进问题,有些问题有多个跟进问题,其中要求的顺序无关紧要,有些问题< strong> no 跟进问题(主要是每个问题链末尾的问题)。

我的第一个想法:

问题( ID ,问题)

下一步( mainQuestion,nextQuestion

此处必须跟进问题,因为“nextQuestion”不能为空

我的第二个想法:

enter image description here

这里的问题是,只能有一个跟进问题。

我看到的唯一解决方案是在我的第一个想法中为Next表添加一个ID,以便“nextQuestion”和“mainQuestion”不再是PK的一部分。永远不会使用ID,这就是为什么我在这里。你们有更好的解决方案吗?

提前致谢!

4 个答案:

答案 0 :(得分:1)

从你的描述来看,听起来你有一个你没有建模的额外实体,比如“QuestionSet”。问卷由一系列问题集组成。其中大多数都是个别问题。有些是可以按任何顺序询问的集合。考虑到这一点,您应该能够表达问卷。

答案 1 :(得分:1)

我认为不应该为下一个问题设置一个单独的表,你应该有这样的东西

Table_Question

QuestionID text        FollowedBy
 1         Some Text   NULL
 2         Some Text   1
 3         Some Text   2
 4         Some Text   3
 5         Some Text   4
 6         Some Text   2
 7         Some Text   6 

依旧......如果你有一个跟进问题,只有一个主要问题,这将会正常工作。

如果跟进问题后跟多个主要问题,那么您需要一个单独的表来跟进问题,如下所示

Table_Question
QuestionID text        
 1         Some Text  
 2         Some Text 
 3         Some Text
 4         Some Text 

Table_FollowUpQuestion
FolUpQuestionID Text       QuestionID 
1                Some Text    1
2                Some Text    1
3                Some Text    2
4                Some Text    3
5                Some Text    4

等等......

而且甚至更好,或者我最好选择你将有3张桌子

  

1主要问题
  2 Sub_Question
  3 Followed_Question

像这样的东西

Table_Question
QuestionID text        
 1         Some Text  
 2         Some Text 
 3         Some Text
 4         Some Text 

Table_Sub_Question
FolUpQuestionID Text       
1                Some Text 
2                Some Text 
3                Some Text
4                Some Text
5                Some Text

Table_FollowUpQuestion
FolUpQuestionID    QuestionID 
1                    2
2                    3
3                    3
4                    4
5                    5

答案 2 :(得分:0)

问题(身份证,问题)

下一步(mainQuestion,nextQuestion)

仍然是最好的解决方案。

如果我不想要一个问题来提出跟进问题而不是我没有设置&#34; nextQuestion&#34;为NULL,但我只是停止向表中添加行。

答案 3 :(得分:0)

  • 如果一个问题可能有零个,一个或多个问题,但一个问题可以在前面加零或一个问题,那么Question表应该有一个指向前一个问题ID的FK:dbo.Question(QuestionID, Content, PreviousQuestionID)
  • 如果一个问题可以有零个,一个或多个问题,但一个问题可以在零之前,一个或多个问题,那么您需要另一个表dbo.AsocQuestions

dbo.Question(QuestionID, Content)(PK = QuestionID

dbo.AsocQuestions(FromQuestionID, ToQuestionID)(PK = FromQuestionID + ToQuestionID