数据库设计自定义表单生成器(和结果的存储)(Database design for custom f

2019-09-03 02:50发布

我想实现一个自定义表单生成器,类似于提供的Wufoo项目和谷歌 。

虽然我已经创建了一个简单的用户界面与创建这些自定义表单,我的问题在于数据库设计。 在创建的形式,一个JSON实现(想改善这一点)保存在数据库中,并引用构建表单,用户会看到。

提交后,我想所有的表单字段存储在数据库中。 根据用于设计数据库的JSON结构,这是很容易的。 不过, 我想每一个人领域进行搜索

问题:

  1. 有没有更好的方式来存储表单设计?
  2. 什么数据结构/模型是否适合表单的结果的存储? 我已经看到了EAV可能是一个方法可行,但由于涉及到不同的输入类型(下拉,复选框,文本,文本区域),这会变得单调乏味。
  3. 其结构将允许最简单的搜索和允许使用WHERE子句的? 给出的JSON例如,不允许我这样做相当的好听

Answer 1:

EAV是一个有效的选项 - 它可以是复杂和笨拙什么实际上变成无类型的数据。

XML使用XPath也将是一种选择: http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html

我认为,大多数情况下,将要求您生成动态SQL如果字段进行搜索可以有所不同。



Answer 2:

EAV工作得很好,因为你可以映射值往往映射成几个基本类型。 在个人项目中,我们有一个表:

entity_id     : INTEGER REFERENCES entities(id)
attr_id       : INTEGER REFERENCES attributes(id)
value_bool    : BOOLEAN
value_int     : INTEGER
value_string  : VARCHAR
value_text    : TEXT

而关于attr_id的相关信息存储在不同的表,我们可以找到的属性类型和名称,这样。 此外字符串和文本之间的区别是,文本可以在其上具有“全文”搜索索引,而字符串是基本相符的索引而已。

当你想查询的attrbute,你看它的属性表,然后contruct通过设置合适的条件,如“WHERE attr_id = 12,VALUE_STRING =‘的SFD’”查询。

为了加快查询速度,使有条件的指数双列,就像这样:

CREATE INDEX test ON eav(attr_id, value_int) WHERE value_int IS NOT NULL;

另一种方法是也有一个自定义的分贝功能,可以索引和搜索含有JSON字段的一列。 更艰难的工作...



文章来源: Database design for custom form builder (and storage of results)