我想构建一个与wufoo非常相似的在线表单构建器,允许用户创建和发布自己的Web表单。每个提交都应保存到数据库,用户以后可以在其中检索提交内容。
因为这些形式是动态的,即。用户可以完全控制表单字段的数量和类型,我试图想出一个可靠的数据库设计来存储这些信息。
我会有一个表字段类型,其中包含用户可用的每种类型的字段,即。 textfield,emailfield等。
一个基本表格,用于保存每个表单id,url等。
然后我会有一个表格表格,其中包含对基本表格和字段类型的引用,此表格还可以包含要在每个字段上完成的自定义验证。
这种设计作为基础结构是否良好?我想在应用程序中添加新类型的字段会很容易,但我不知道潜在的缺点是什么,因为我远不是一个SQL专家。
答案 0 :(得分:1)
在SQL中存储用户定义的数据
我认为您正在寻找Entity–attribute–value数据库模型,其中包括:
基本思想是存储属性及其相应的值, 作为单个表中的行。
通常,表至少有三列:entity,attribute和 值。但是,如果只有一个相关实体,例如一张桌子 对于应用程序配置或选项设置,实体列 可以被排除在外。
将此页面视为开头:
Using Database Metadata and its Semantics to Generate Automatic and Dynamic Web Entry Forms(pdf)
Planning and Implementing a Metadata-Driven Digital Repository(pdf)
我使用entity-attribute-value标记重新提出了您的问题,您可以在其中浏览与您的案例相关的大量话题。
答案 1 :(得分:0)
正如Mahmoud Gamal所写,你描述的模型是“实体/属性/价值”;正如Borys所写,这个模型存在许多已知问题。
作为替代方案,您可以考虑将表单条目存储在“文档”中 - 例如XML或JSON - 在关系模型中。
例如,您可能有一个表格:
FORM_SUBMISSION
--------------------
Submission_ID (pk)
Client_ID (fk to clients table)
Submission_date
SubmissionDocument
我正在使用“client”来表示创建表单的用户;要检索给定客户端的所有提交,请在client_id上使用where子句。
这个模型使得对表单提交运行SQL查询变得更加困难(尽管在超越非常简单的查询时,EAV也变得很难),但它大大简化了持久性解决方案。