DB结构用于保存动态创建的表单的表单数据

时间:2013-02-06 12:14:03

标签: mysql mongodb database-design

我正在考虑一个用例,其中应用程序的每个用户都可以创建具有不同数据类型的n个不同表单字段的N个表单。然后,每个用户可以以各自的形式接收表单数据。然后可以更新,编辑,搜索,排序等数据。

我想知道,我如何在MySQL中为此设计数据库架构。

我最初的方法是将表单结构形式的表单结构以form_id作为主键保存在一个表中。另一个表,数据应保存带有列的记录:form_id,record_id,order,value。这里,order将是表示表单结构中字段位置的数字。 value列应具有该字段的值。这种方法使我有10行(对于10个字段的表单)用于1组记录。另外,我不认为这样的查询可以写入特定表单的搜索记录。

我确实考虑过将mongodb用于这个用例,其中表单结构应该存储在一个数组中,并且在该数组中,应该存储该数据表单的所有记录。我从来没有使用过mongodb,但我想mongodb对大小有一些限制,如果我将文档存储在文档中。那么,使用MySQL(或任何其他适用于这种用例的数据库)的最佳方法是什么呢?

1 个答案:

答案 0 :(得分:1)

每个mongoDB文档的大小限制为16mb。如果您需要更大的每个文档,那么您需要适当地调整您的设计。 MongoDb还包括GridFS,它允许您将较大的文件分成块。

在您的示例中,您可以将表单字段存储为mongoDB中的数组,但您也可以将它们存储为嵌入式文档。无论您选择哪种方式,your schema design in mongoDB都需要匹配您的数据访问模式。

通过您的应用程序向mongoDB文档添加新的key:value对很容易。伪代码将是:

if user adds form field
db.collection.update({'id':1},{$addToSet {'newField':'value'}})

我知道你的问题是关于MySQL的结构,但我认为值得展示它如何在mongoDB中运行(显然需要适应你选择的语言)。