sql - 在数据库上生成动态字段并为表单生成动态字段

标签 sql sql-server database database-design

最近我看到一个网站应用程序,其中有一个有趣的 HTML 表单引起了我的注意!在网站管理系统中,您可以定义一个表格(例如就业表格),并且可以定义表格中需要哪些字段。

例如,您可能需要一个包含生日、姓名、姓氏和性别字段的表单,生日和姓名和姓氏类型为 Textbox,性别类型为 Checkbox,这样您就可以可以为您生成优化的表单,另一个也可以创建她/他的优化的表单。

之后,任何人都可以在网站客户页面中填写您的表格,并且您可以在经理网站中看到所有填写的表格。所以我有一个很大的问题,网站数据库是如何设计的,可以动态更改字段?!在第一个 View 中,我认为数据库中有一个列,其类型是 XML,并且它可以在单列中生成基于 XML 的任何表单。但我认为这不是一个好方法,因为我们将拥有许多相似数据的拥抱数据库(XML文本大多相似),那么有没有更好的方法来做到这一点?

注意:数据库在sqlserver2012上,我问网站管理员你是怎么做到的,他告诉我这种设计称为“属性引擎”,因为我搜索了它,但我没有找到任何有用的信息!那么你的想法是什么?

最佳答案

我不认为你一定需要XML来实现这样的系统,这是选择的问题。例如可以这样实现:

enter image description here

这意味着:在你的数据库模型中朝 META 方向前进一步。

但是当然,您必须围绕这样的数据库模型来实现应用程序,这并不简单。当然,已经存在许多这样的实现。


您还可以查看这个question - 这里的设计稍微简单一些,不允许在各种表单中重用字段 - 这可能没问题甚至更好,具体取决于您计划实现的内容。因此,表单表和字段表之间的关系为 1:N。

enter image description here

所以你的数据库字段将是这样的:

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/

相关文章:

mysql - 如何从 SQL Server 中的表中检索前 N 行或所有行

mysql - 为多个选择计数 (*) 表设置列名称

sql-server - 如何在sql server中自动连接三个字符串前两个字符

java - 保持数据库连接打开还是每次需要时重新打开它?

python pandas to_sql 与 sqlalchemy : how to speed up exporting to MS SQL?

sql - 在 Ruby on Rails 中连接 SQL 服务器

javascript - 使用带有 sql server 字段的 c#、javascript 和 HTML 在 <select> 元素中添加项目

c# - 查找相关提交的高效算法

MYSQL数据库: How do I structure the database for multiple devices and multiple data?

sql - 如何使用 select 查询的输出作为 insert 查询的输入?