此数据库设计是否适用于具有子问题?

时间:2012-05-22 06:45:27

标签: sql database-design sql-server-2008-r2

我有以下数据库设计:

Employee Table: EmployeeID, Name, OrgCode
Department Table: OrgCode, DepartName
CompleteSurvey Table: ID, RespondantID, QuestionsAnswersID
Questions Table: QuestionID, Question
Answers Table: AnswerID, Answer
QuestionsAnswers Table: ID, QuestionID, AnswerID

每个问题都有不同的多种选择。除此之外,我想在这个问题下添加子问题。大多数

问题有相同的选择,例如(同意,不同意)。我想编写显示问题的查询,包括

它的子问题及其所有选择和每个选择的参与者数量,即使它是零。

我不确定问题表是否可以帮助我在任何问题下插入子问题。这种设计适用吗?你推荐什么?

2 个答案:

答案 0 :(得分:1)

嗯不,没有地方指定子问题的父级(或问题的子级)。

可能的方法是: 1.添加父列问题表,在其中放置父问题的ID。 2.将一个子问题列添加到Questions表,并将子问题ID存储为array / json。我认为这可能会使查询变得困难。 3.创建新的表子项 - 为您创建的每个子项创建2列。

答案 1 :(得分:1)

在您当前的问题表中,您不能有子问题。您可以尝试使用代表子问题的ID(例如问题有ID 2,然后针对具有ID 2A或类似内容的子问题),但此设计可能会失败,这取决于您的ID计算,也不能确保子问题的水平。

更好的方法是让Parent-Child Dimension用于自引用关系。你可能有:

  

问题表:QuestionID,Question,ParentID

其中ParentID是某个问题的ID。如果它为null则问题不是任何问题的子问题。您还可以看到Employee-Manager Relationship的递归关系,这可以帮助您更好地理解您的问题