0

首先,我认为这个问题可以与任何语言相关,但我指定了我使用的语言。

如果我也开始感到无聊,请原谅,但我正在尝试找出构建动态调查管理系统的最佳方法。我的客户基本上已经对我说,数据必须存储在 MS SQL 中,因为他的客户只有用于 SAS 的 MS SQL 连接器,它将进行报告。

到目前为止,我的逻辑是这样的:第一。设置调查本身,即询问标题、快速概览等。 2nd。定义你的问题。第三。发布调查。

现在我到目前为止所做的是,当他们“发布调查”时,我为此调查创建了一个专用的数据库表,其中将存放回复。从管理员的角度来看,他们将无法修改问题,也许是问题标题,但仅此而已。他们不能添加/删除问题。

问题是,创建单独的数据库表是一件好事吗?我唯一担心的是,如果管理员创建了 30 个问题,我将在该专用表中有 30 列。为此,SAS 系统可能很容易通过这种方式提取数据以进行报告。顺便说一句,管理员不会在管理面板中看到调查回复。

4

5 回答 5

3

我为语言等级考试做了类似的事情。我使用下表选择了一种更灵活的方法

+------+    +-------------+    +-------------+    +-------------+    +----------+
| Exam |    | Question    |    | Choice      |    | Answer      |    | User     |
+------+    +-------------+    +-------------+    +-------------+    +----------+
| id   |    | id          |    | id          |    | id          |    | id       |
| name |    | questionNb  |    | choice      |    | user_id     |    | name     |
+------+    | question    |    | question_id |    | exam_id     |    | email    |
            | exam_id     |    | isAnswer    |    | question_id |    | password |
            +-------------+    +-------------+    | choice_id   |    +----------+
                                                  | isGood      | 
                                                  +-------------+ 

这个模型让我可以轻松地进行 15 题考试、30 题考试和 50 题考试。要使这个模型适应调查,您可能只需要删除 isAnswer 和 isGood 部分,您应该很好,并用匿名的一般数据(如年龄、收入、性别)替换用户数据。

于 2011-01-20T15:02:32.083 回答
2

为每个问题创建一个列是完全错误的,在运行时更改数据库以用于面向业务的目的是“永远不会做的”。阅读有关“关系数据库”的内容应该如下所示:

table_surveys id 调查名称

table_questions id fk_survey(table_surveys 的外键) question_text(问题值?也许)

table_questions_options id question_id(table_questions 的外键) option_value(对于测试可以是真/假,对于调查可以是数值) option_label

table_users id 用户名 密码

table_answers id options_fk(table_question_options 的外键) users_fk(table_users 的外键)

通过这种方式,所有内容都链接在一起(不重复使用选项、问题或其他内容到不同的调查中)

于 2011-01-20T15:43:13.453 回答
0

根据文档中的评论, PHP 中的MS SQL 支持充其量是不确定的。PHP 是您被允许在项目中使用的唯一语言吗?如果没有,您可能要考虑使用 C#、VB.Net 或与 SQL Server 更兼容的东西。否则,您可以先将数据存储在 MySQL 中,然后在需要进行分析时将其导出到 MS SQL Server。

于 2011-01-20T14:51:40.460 回答
0

不知道,如果我真的理解你的问题。但是我曾经建立过这样一个调查系统。它通过以下表格快速轻松地得出结论(如果我没记错的话):

USER, SURVEYS, QUESTIONS, ANSWERS, [some mapping tables]

SAS 将从虚拟任何表中获取数据。如果一切都在一两张桌子上,那就更容易了。

于 2011-01-20T14:52:45.173 回答
0

尽管对 Kibbee 给予了应有的尊重,但 PHP/MSSQL 支持实际上非常好。我们经常这样做,并且性能优于 PHP/MySQL,并且与编译的 C#/MSSQL 相匹配(在我们非常有限且不科学的测试中)。这是假设您在 Win 机器上运行 PHP。将带有 TLS 连接器的 PHP 运行到单独的 MSSQL 框是另一个问题,而且配置起来很麻烦。

无论如何,我们有一个类似的场景,并使用一个表来管理表单(以 FormID 为主要的表单),另一个用于管理字段/问题(字段 w/FieldID、FieldType 如 Y/N、文本、选择等。 ),另一个将字段“分配”给表单(FormFields w/FormFieldID、FormID、FieldID、用于选择项目的数组中的参数等)。然后是另一组表格来处理问题的回答。

我同意小组的其他成员。确保规范化并且不要为每个问题创建单独的列。最初它会做更多的工作,但是当您只需向表中添加几行而不是重新编写查询和重新设计表时,您会很感激。

于 2011-05-27T16:05:51.860 回答