通用Web表单的数据库设计
我想构建一个通用Web表单的后端,其中包含用户可以回答的问题。有多种类型的问题。
- “普通”文本问题:通过一个简单的文本字段回答该问题。 示例 :一般的个人信息,例如姓名。
- Textarea问题:相同,但是有更多的空间来写答案。 示例 :“您想要添加的更多信息”框。
- 多选题:带有一些预定义答案的问题,可以从中选择一个。 示例 :您对PHP的编程程度如何?[]不太好[]平均[]我已经写过这本书。
- …(其他问题类型应该是可添加的,而不必太费力气)
用户输入的输入应存储在MySQL数据库中。
我的问题是表格应该是可编辑的。它不会经常编辑,但是当它更改时,现有的提交不应受到更改的影响。由于这个事实,我认为仅通过XML文件进行配置是不够的。
我的方法如下:
- 使用MySQL数据库(更好的方法?)对问题进行配置。
- 数据库布局如下:
- 问题
- id:INT
- 问题:TEXT
- 类型:枚举(’NORMAL’,’TEXTAREA’,’MULTIPLE’)
- active:BOOL-如果问题以当前形式使用,则为true。如果不再使用它,并且仅保留在数据库中以与旧提交兼容,则返回false。
- q_multiplechoice
- id:INT
- Questionid:INT
- 答案:TEXT
- 意见书
- id:INT
- 用户名:INT
- 提交细节
- SubmittingID:INT
- Questionid:INT
- 给定答案:TEXT
如您所见,它为一个简单的Web表单使用了四个表。我认为这不是在此处使用的最佳方法,而是要您问一下是否可以给我一些有关应该应用哪些设计更改的提示。
(我考虑过的另一种方法是在提交数据库中存储带有呈现的提交的HTML字符串,并使用简单的配置文件来配置问题。旧的提交不会受到配置更改的影响,因为它们已经存储了这种方法的问题是,当设计更改并且应在另一个设计中显示提交时。)
-
首先,让我们同意否定将HTML存储在数据库中的想法,除了可能只有一些标签(例如换行符,粗体,强调和下划线)仅用于问题的文本。如果将重点放在调查的文本/语义上,而不是
查看 详细信息,那么定义调查和利用其输出将容易得多。为了支持View(“布局”)配置,可以使用CSS。这将键入问题的ID,该ID将用作View决定存储问题的div(或其他html容器)的ID。在问题记录中也可以列出一些类名,但是用CSS定义。
在建议的数据库模式上,重要的东西似乎已经存在。但是,我看不到提交的响应存储在哪里;是在“提交+提交详细信息”表中?如果是这样,则将MULTIPLE响应类型存储在哪里,它们是否将转换为文本并转换为给定答案?(我认为他们不应该这样做,除非我们更喜欢在竞选期间修改调查后捕获稍有不同的价值。)
一些缺少的属性和想法:
- 应该使多个(或另一种类型)能够 支持“单选按钮”类型选择 (“仅一个”)。一种可能的方法是在类型中添加一个属性,定义允许的最大选择数,这是一种常见的调查内容:“在以下项中选择3个…”
- 问题记录可以具有“广告系列”或 SurveyID ,从而可以在同一商店中存储多个调查。
- 不必太花哨, 可以将 某些 问题 假定 为先前的“布尔”类型的问题 。(如果被调查者对拥有自己的汽车回答“否”,请不要询问换油的频率…)这可以由问题ID和响应值(“通用文本”来定义)。
- 问题表:添加一个“ 页码 ”,以便对问题进行分组(除非在问题容器概念(例如“调查”或“广告系列”)中定义了此信息)
- 问题表:添加“ 序列号 ”以允许以预定的顺序获取问题(除非此类来自“调查/活动”表,此处未显示)
- q_multiplechoice :(或列出给定MULTIPLE CHOICE的选项的任何表;我怀疑该表将其字段显示为问题中的showin。)添加 序列号 ,从而允许以特定顺序列出选项。