【问题标题】:Dynamic survey application logic PHP/MSSQL动态调查应用逻辑 PHP/MSSQL
【发布时间】:2011-01-20 14:44:47
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php sql-server sas survey


    【解决方案1】:

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

    +------+    +-------------+    +-------------+    +-------------+    +----------+
    | 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 部分,您应该很好,并将用户数据替换为匿名的一般数据,例如年龄、收入、性别。

    【讨论】:

      【解决方案2】:

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

      table_surveys ID 调查名称

      table_questions ID fk_survey(table_surveys 的外键) 问题文本 (问题价值?也许)

      table_questions_options ID question_id(table_questions 的外键) option_value(这可以是测试的真/假或调查的数值) 选项标签

      table_users ID 用户名 经过 名字

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

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

      【讨论】:

      • 我明白 Jeff 和你在说什么,老实说,我会创建一个表格来存储所有回答的问题,但是由于这个 SAS 系统,我认为这将是一个不错的选择。我并不是真的想创建多个表,而且通常从不这样编写代码,我真的很想听听其他人的意见 :-)
      【解决方案3】:

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

      【讨论】:

      • 我要求客户使用 MYSQL,但显然他的客户购买了 MSSQL 连接器。不要误会,我也不是 PHP/MSSQL 的忠实粉丝 :-(。我可能会研究 MYSQL,然后导出到 MSSQL,但这取决于 SAS 多久会发挥它的魔力
      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

        • 对于问题发布六个月后的回复,我们深表歉意!我的错。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-09
        • 1970-01-01
        • 2011-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多