Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在数据库上生成动态字段,并为窗体生成动态字段_Sql_Sql Server_Database_Database Design - Fatal编程技术网

Sql 在数据库上生成动态字段,并为窗体生成动态字段

Sql 在数据库上生成动态字段,并为窗体生成动态字段,sql,sql-server,database,database-design,Sql,Sql Server,Database,Database Design,最近我看到一个网站应用程序,有一个有趣的HTML表单引起了我的注意!在网站管理器系统中,您可以定义一个表单,如就业表单,您可以定义表单中需要哪些字段 例如,您可以想要一个包含生日、姓名、姓氏和性别字段的表单,其中生日、姓名和姓氏类型为Textbox,性别类型为复选框,这样您就可以生成优化表单,而另一个人也可以创建她/他的优化表单 之后,任何人都可以在网站客户页面中填写您的表格,您可以在经理网站中看到所有填写的表格。所以我有一个大问题,网站数据库是如何设计的,它可以动态地改变字段?!在第一个视图中

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

例如,您可以想要一个包含生日、姓名、姓氏和性别字段的表单,其中生日、姓名和姓氏类型为
Textbox
,性别类型为
复选框
,这样您就可以生成优化表单,而另一个人也可以创建她/他的优化表单

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


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

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

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 

这意味着:只需在数据库模型中朝着元的方向前进一步

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


您也可以检查这一点-这里的设计稍微简单一些,不允许在各种表单中重用字段-这可能没问题,甚至更好,这取决于您计划实现什么。所以在表单和字段表之间有关系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 
如果不需要跟踪填写表单的人的信息,还可以从模型中删除filled form表


在这样的数据库设计中,不要忘记创建适当的主键和索引。

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

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 

这意味着:只需在数据库模型中朝着元的方向前进一步

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


您也可以检查这一点-这里的设计稍微简单一些,不允许在各种表单中重用字段-这可能没问题,甚至更好,这取决于您计划实现什么。所以在表单和字段表之间有关系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 
如果不需要跟踪填写表单的人的信息,还可以从模型中删除filled form表


在这样的数据库设计中,不要忘记创建适当的主键和索引。

非常感谢VDohnal,我有一些想法来实现此数据库,但我正在寻找新的更好的解决方案,您的答案对我来说是一个新的好解决方案,但是你能给我看一些教程或者告诉我一些关键词来帮助我找到更多的例子吗?非常感谢VDohnal,我有一些想法来实现这个数据库,但是我正在寻找新的更好的解决方案,你的答案对我来说是一个新的很好的解决方案,但是你能给我看一些教程或者告诉我一些关键词来帮助我找到更多的例子吗?