2013-02-06 28 views
-1

我正在考虑一个用例,其中应用程序的每个用户都可以使用n个不同数据类型的不同表单字段创建N个表单。每个用户然后可以以其各自的形式接收表格数据。这些数据可以被更新,编辑,搜索,排序等。用于为动态创建的表单保存表单数据的DB结构

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

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

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

+0

关于您的问题的问题太多了......您是否可以缩小范围?有很多种方法可以将它存储在任何现代数据库系统中。这完全取决于数据的使用方式,使用频率以及用户数量。看起来列可能有数据类型(要进行排序,他们需要有关联的数据类型)。 (你用什么查询来试图搜索特定表单的记录?为什么他们不能被搜索? – WiredPrairie

回答

1

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

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

通过应用程序很容易将新的键值对添加到mongoDB文档中。伪代码将是:

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

我知道你的问题是关于MySQL的结构,但我认为它值得炫耀它如何在MongoDB中工作(显然需要适应你选择的语言)。

+0

谢谢!我猜MongoDB应该可以工作,但是我需要进一步探索。 – gentrobot

+0

没问题 - 有很棒的文档可用,我上面链接和大量的好书加10gen运行免费的在线课程。享受! – br3w5

+0

感谢您接受我的答案 - 请upvote它,如果你满意的话:) – br3w5