1

我想构建一个类似于 wufoo 的在线表单构建器,它允许用户创建和发布他们自己的 Web 表单。每个提交都应保存到数据库中,用户以后可以在该数据库中检索提交。

因为这些形式将是动态的,即。用户可以完全控制表单字段的数量和类型我试图考虑一个可靠的数据库设计来存储这些信息。

我将有一个表字段类型,其中包含用户可用的每种类型的字段,即。文本字段、电子邮件字段等

一个 baseform 表,它将保存每个表单 id、url 等。

然后,我将有一个表格表单字段,其中将包含对 baseform 和 fieldtype 的引用,该表格还可以包括要对每个字段进行的自定义验证。

这种设计作为基础结构好吗?我想向应用程序添加新类型的字段会很容易,但是我不知道潜在的缺点是什么,因为我远非 sql 专家。

4

2 回答 2

1

在 SQL 中存储用户定义的数据

我认为您正在寻找Entity-attribute-value数据库模型,其中:

基本思想是将属性及其对应的值存储为单个表中的行。

通常,该表至少具有三列:实体、属性和值。尽管如果只有一个相关实体,例如用于应用程序配置或选项设置的表,则可以排除实体列。

请参阅此页面作为开始:

我用标签重新标记了您的问题,您可以在其中浏览许多与您的案例相关的线程。

于 2012-09-06T12:42:46.313 回答
0

正如 Mahmoud Gamal 所写,您描述的模型是“实体/属性/值”;正如 Borys 所写,这种模型存在许多已知问题。

作为替代方案,您可能会考虑将表单条目存储在关系模型中的“文档”(例如 XML 或 JSON)中。

例如,您可能有一个表格,如下所示:

FORM_SUBMISSION
--------------------
Submission_ID (pk)
Client_ID (fk to clients table)
Submission_date
SubmissionDocument

我使用“客户端”来代表创建表单的用户;要检索给定客户端的所有提交,您可以在 client_id 上使用 where 子句。

该模型使得针对表单提交运行 SQL 查询变得更加困难(尽管在超出非常简单的查询时,EAV 也变得困难),但它极大地简化了持久性解决方案。

于 2013-08-10T10:33:37.563 回答