最近我看到一个网站应用程序,其中有一个有趣的 HTML 表单引起了我的注意!在网站管理系统中,您可以定义一个表格(例如就业表格),并且可以定义表格中需要哪些字段。
例如,您可能需要一个包含生日、姓名、姓氏和性别字段的表单,生日和姓名和姓氏类型为 Textbox
,性别类型为 Checkbox
,这样您就可以可以为您生成优化的表单,另一个也可以创建她/他的优化的表单。
之后,任何人都可以在网站客户页面中填写您的表格,并且您可以在经理网站中看到所有填写的表格。所以我有一个很大的问题,网站数据库是如何设计的,可以动态更改字段?!在第一个 View 中,我认为数据库中有一个列,其类型是 XML,并且它可以在单列中生成基于 XML 的任何表单。但我认为这不是一个好方法,因为我们将拥有许多相似数据的拥抱数据库(XML文本大多相似),那么有没有更好的方法来做到这一点?
注意:数据库在sqlserver2012上,我问网站管理员你是怎么做到的,他告诉我这种设计称为“属性引擎”,因为我搜索了它,但我没有找到任何有用的信息!那么你的想法是什么?
最佳答案
我不认为你一定需要XML来实现这样的系统,这是选择的问题。例如可以这样实现:
这意味着:在你的数据库模型中朝 META 方向前进一步。
但是当然,您必须围绕这样的数据库模型来实现应用程序,这并不简单。当然,已经存在许多这样的实现。
您还可以查看这个question - 这里的设计稍微简单一些,不允许在各种表单中重用字段 - 这可能没问题甚至更好,具体取决于您计划实现的内容。因此,表单表和字段表之间的关系为 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 表。
在这样的数据库设计中,不要忘记创建适当的主键和索引。
关于sql - 在数据库上生成动态字段并为表单生成动态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26774308/