-1

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

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

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

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

4

1 回答 1

1

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

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

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

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

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

于 2013-02-06T12:22:30.357 回答