动态表单生成器表单和数据库设计?[关闭]


30

假设您的用户可以创建自己的基于Web的表单(文本框,选择框等),然后将其发布到Web上以供用户填写。

是否有人有资源或关于如何构建数据库以将其绑定到动态表单方面的建议?

例如,您会为每个表单或给定表单的不同版本创建一个子表吗?


Answers:


35

根据用户输入动态创建新表通常不是一个好主意。如果表单的基本结构发生变化,则所有动态创建的表都需要更新以包括新列或删除旧列,这可能会引起维护麻烦。然后就是知道要查询哪个表的问题(这可能会导致动态SQL,这会带来所有新问题)。而且也可能存在性能问题,但是我不确定那会是多么糟糕。而且,表通常用于表示一种实体类型(例如“ Web表单”),而不是为同一实体的每个新实例具有相同表的副本。

我建议为表格准备一张桌子。在每个表单上都需要一个标识符来标识它是谁的表单:

形式
-----
  id(PK)
  名称
  owner_id(FK到users.id)
  (其他领域)

form_elements
-------------
  id(PK)
  form_id(FK到forms.id)
  element_type_id(从FK到element_types.id)
  字幕
  (其他领域)

element_types
-------------
  id(PK)
  名称

element_list_values
-------------------
  id(PK)
  element_id(从FK到form_elements.id)
  名称
  值
  (其他字段?)

您的Web应用程序可以让用户创建要保存在forms表中的表单,并引用创建的用户(假设您将用户作为适当的实体进行跟踪)。该表格将使用form_elementsforms表的引用进行填充,因此他们知道它们属于哪个表格,并且element_types他们知道它们属于哪种类型。element_types将存储表单可以具有的不同元素的静态(大部分)静态列表。类型可以是:“文本字段”,“下拉列表”,“单选按钮”,“复选框”。对于“ drop_down_list”和“ radio_buttons”之类的类型,您将需要一个额外的表,可以调用该表element_list_values来存储这些元素通常具有的列表的可能选项。


2
很好的解决方案。TY
Jeff Borden

您是否知道任何现有的Web表单构建器GUI工具可用于偶然填充您在上面概述的表模式?如果相关,我们正在使用.NET。TY。
杰夫·博登

@JeffBorden:不,但是我确定那里有东西。
FrustratedWithFormsDesigner

因此,我假设记录提交表单的最佳方法是使用以下格式: form_submissions id(PK)form_id(FK到forms.id)user_id(FK到users.id)... form_submission_elements id(PK)form_submission_id (FK到form_submissions.id)form_element_id(FK到forms_elements.id)值看起来正确吗?
杰夫·博登

@FrustratedWithFormsDesigner如何选择从该模式中的表单字段和字段值生成表格!
爱马仕(Hermes Autran)2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.