最近我看到了一个网站应用程序,有一个有趣的HTML表单引起了我的注意!在网站管理员系统中,您可以定义一个表格,如就业表格,您可以在表单中定义所需的字段。
例如,您可能希望生日,姓名,姓氏和性别字段的表单生日,姓名和姓氏类型为Textbox
,性别类型为Checkbox
,因此您可以生成优化的表单和另一个人也可以创建她/他的优化形式。
之后,任何人都可以在网站客户页面填写您的表单,您可以在经理网站中查看所有填写的表格。所以对我来说有一个很大的问题,网站数据库如何设计它可以动态地改变字段?!在第一个视图中,我认为数据库中有一个列,它的类型是XML,它可以在单列中生成基于XML的任何表单。但我认为这不是一个好方法,因为我们将拥有许多类似数据的拥抱数据库(XML文本大多相似),那么有更好的方法吗?
注意:数据库在sqlserver2012上,我问网站管理员你是怎么做到的,他告诉我这种类型的设计被称为“属性引擎”,因为我搜索了它但是我没有找到任何有用的信息!那么你的想法是什么?
答案 0 :(得分:2)
我认为您不一定需要XML来实现这样的系统,这是选择的问题。它可以像下面这样实现:
这意味着:只需在数据库模型的META方向上向前迈出一步。
但是当然你必须围绕这样一个不简单的数据库模型实现应用程序。当然已经存在很多这方面的实现。
你也可以查看这个question - 这里的设计有点简单,不允许在各种表格中重复使用字段 - 这可能没问题,甚至更好,取决于你计划实施的内容。因此,Form和Field表之间会有1:N的关系。
所以你的数据库字段是这样的:
Form
-----
FormID (PK)
FormName
UserId (FK to users)
(other fields)
FormField
-------------
FormFieldId (PK)
FormID (FK to form)
FieldTypeId (FK to FieldType)
FieldName (or Caption ...)
(other fields)
FieldType
-------------
id (PK)
name
FilledForm
-------------------
FilledFormId (PK)
+IPAddress, data about who filled the form...
FilledFormField
-------------------
FilledFormFieldId (PK)
FilledFormId (FK)
FormFieldId (FK)
Value
如果您不需要跟踪填写表单的人的信息,您也可以从模型中删除FilledForm表。
在这样的数据库设计中,不要忘记创建正确的主键和索引。