2014-11-06 83 views
0

最近我看到一个网站应用程序,并且有一个有趣的HTML表单引起了我的注意!在网站管理员系统中,您可以定义一个表格,例如就业表格,您可以在表格中定义您需要的字段。在数据库上动态生成字段并生成表单的动态字段

例如,您可以使用生日,姓名和性别字段来填写生日,姓名和姓氏类型为Textbox,性别类型为Checkbox,因此您可以生成优化表单,另一个可以创建她/他的优化的形式。

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

note:数据库是在sqlserver2012上,我问网站管理员,你是怎么做到的,他告诉我这种类型的设计被称为'财产引擎'为我搜索它,但我没有找到任何有用的信息!那么你的想法是什么?

回答

1

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

enter image description here

这意味着:刚拿在你的数据库模型的方向META向前迈出的一步。

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


您还可以检查此question - 这里的设计是一个稍微简单一些不允许各种形式的内场的再利用 - 这可能是好的,甚至更好,取决于你计划实现什么。所以你应该在Form和Field表之间建立关系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表。

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

+0

谢谢VDohnal这么多,我有一些想法来实现这个数据库中,但我在寻找新的,更好的解决方案,你的答案对我来说是新的和良好的解决方案,但你能告诉我一些教程或告诉我一些关键字可以帮助我找到更多的例子? – 2014-11-09 07:01:47

+0

感谢您提供完整,简单,明确的答案,这真是太棒了。 – 2014-11-09 09:08:22