一般Web表单的数据库设计

时间:2009-09-26 21:15:38

标签: sql database-design data-modeling

我想构建一个通用Web表单的后端,其中包含用户可以回答的问题。有多种类型的问题。

  • “正常”文字问题:通过简单的文字字段回答问题。 示例:一般个人信息,例如名称。
  • Textarea问题:同样的,但有更多的空间来写答案。 示例:“您要添加的更多信息”框。
  • 多项选择题:一个带有一些预定义答案的问题,可以从中选择一个答案。 示例:您对PHP的编程有多好? []不太好[]平均[]我写过这本书。
  • ...(其他问题类型应该是可添加的,而不必太多破解)

用户输入的输入应存储在MySQL数据库中。

我遇到的问题是表单应该是可编辑的。它不会经常编辑,但是当它发生变化时,现有的提交不应受到更改的影响。由于这个事实,我不认为通过XML文件进行配置就足够了。

我的方法如下:

  • 问题的配置是使用MySQL数据库(更好的方法?)
  • 数据库布局如下:
    • 问题
      • id:INT
      • 问题:TEXT
      • 类型:ENUM('NORMAL','TEXTAREA','MULTIPLE')
      • active:BOOL - 如果在当前表单中使用该问题,则为true。如果不再使用,则为false,并且仅保留在数据库中以与旧提交的兼容性。
    • q_multiplechoice
      • id:INT
      • questionid:INT
      • 回答:TEXT
    • 提交
      • id:INT
      • userid:INT
    • submissiondetails
      • submitid:INT
      • questionid:INT
      • givenanswer:TEXT

如您所见,它使用四个表作为简单的Web表单。我不认为这是在这里使用的最佳方法,并希望您询问是否可以给我一些关于我应该应用哪些设计更改的提示。

(我考虑过的其他方法是在提交数据库中存储带有呈现提交的HTML字符串,并使用简单的配置文件来配置问题。旧的提交不会受配置更改的影响,因为它们不会已经存储在MySql中。这种方法的问题是,当设计发生变化并且提交应该在另一个设计中显示时。)

1 个答案:

答案 0 :(得分:3)

首先,让我们同意否决将HTML存储在数据库中的想法,除了可能只有几个标签,如换行符,粗体,强调和下划线,仅用于问题的文本。如果重点关注调查的文本/语义,而不是 查看 详细信息,则定义调查并利用其输出将变得更加容易。

要支持View(“布局”)配置,CSS可能是故障单。这将键入问题的ID,该ID将用作视图决定存储问题的div(或其他html容器)的ID。一些类名也可以列在问题记录中,但在CSS中定义。

在建议的数据库模式上,重要的东西似乎就在那里。然而,我没有看到提交的回复存储在哪里;在提交+ submitiondetails表中?如果是这样,MULTIPLE响应类型存储在哪里,它们是否转换为文本,转换为给定的响应? (我不认为他们应该这样做,除非我们更喜欢在活动期间修改调查时捕获稍微不同的值。)

一些遗漏的属性和想法:

  • MULTIPLE(或其他类型)应该能够支持“单选按钮”类型选择(“仅一个”)。一种可能的方法是在类型中添加一个属性,以定义允许的最大选择数量,这是一个常见的调查事项:“在以下内容中选择3个......”
  • 问题记录可能包含“广告系列”或 SurveyID ,允许在同一商店中存储多个调查。
  • 如果没有过于花哨的话,一些问题可以预测为之前的“布尔”类型问题。 (如果被轮询的人回答“否”拥有汽车,请不要询问换油的频率......)这可以通过questionID和ResponseValue(?文本的通用性?)来定义。
  • 问题表:添加“页码”,允许对问题进行分组(除非此信息在问题容器概念中定义,例如“调查”或“广告系列”)
  • 问题表:添加“序列号”,允许按预定义的顺序获取问题(除非此类调查/广告系列表未在此处显示)
  • q_multiplechoice :(或者列出给定MULTIPLE CHOICE的选项的任何表格;我对此表格的疑问看到它的字段在问题中显示。)添加序列号 ,允许按特定顺序列出选项。