我正在为如何建立一个数据库而苦苦挣扎,以应对有人(非匿名)填写问卷的情况。人与调查问卷之间的关系是多对多的--一个人完成多个调查问卷,一个调查问卷由多个人完成。因此,我有一个PERSON表、一个调查问卷表和一个连接表(PERSON- QUESTIONNAIRE )。
但是,我应该把问卷中出现的信息放在哪里呢?调查问卷项目有两个部分(两个字段),一个部分包含人们将回答的问题或陈述(项目),另一个部分包含用于回答(回答)的空间。假设所有这些都放在一个单独的表中,那么这个表与什么连接?(调查表表格...一个调查问卷可以有多个调查问卷项目?)
而且,如果我对最后一点的理解是正确的,那么我无论如何也想不出如何设置一个DB网格(在Delphi中),该网格将显示选定调查问卷和选定人员的ITEM和RESPONSE字段。(我知道如何使用支持db的组件编写主/详细关系,但这就像是两个主组件的详细关系。)
发布于 2012-06-29 03:52:52
您将拥有一个表调查问卷-项目(问题)和一个单独的表调查问卷-回答(答案),因为单个问题将有多个答案,这些答案来自多个人。前者获取调查问卷的外键,而后者获取调查问卷的外键-项目和人员。
实际上,由于可以从其他表中查询该信息,因此可以省略PERSON- queried表。因此,对于设计,我建议:
问题调查: ID (主键)、描述等...
ID (主键)、SurveyID (FK)、Users、etc...
DBGrid的视图将基于如下查询:
SELECT
Question,
Answer,
...
FROM
Questions INNER JOIN Answers ON Questions.ID = Answers.QuestionID
WHERE
Questions.SurveyID = :SurveyID AND Answers.UserID = :UserID在图形用户界面的另一部分中,选择SurveyID和UserID参数。
还有一个额外的好处:获取调查和用户的查询,作为单独连接表的替代方法,将如下所示:
SELECT
Surveys.ID,
Users.ID
FROM
Users INNER JOIN (
Answers INNER JOIN (
Questions INNER JOIN (
Surveys
) ON Questions.SurveyID = Surveys.ID
) ON Answers.QuestionID = Questions.ID
) ON Users.ID = Answers.UserID
GROUP BY
Surveys.ID,
Users.ID发布于 2012-06-29 03:54:31
ITEM和RESPONSE应该是不同的表;它们之间是一对多的关系。(一个项目属于调查问卷,但许多人可以对该项目提供回答,因此每个项目都会有许多回答。)
我推荐这样的设置:
PERSON <---- PERSON_QUESTIONNAIRE ----> QUESTIONNAIRE
^ ^
| |
| |
RESPONSE -----> ITEM我没有任何关于如何设置DB网格的建议(不是Delphi专家),但有时解决设计问题将有助于技术解决方案变得更加清晰。
https://stackoverflow.com/questions/11251776
复制相似问题