关于将MongoDB与MySQL混合用于Web应用程序的建议

Cas*_*ynn 9 mysql rdbms normalization mongodb nosql

我有一个使用关系数据库(MySQL)的Web应用程序.我们正在添加一项新功能,允许某些用户从可选表单元素池中动态构建"表单",并将这些表单分发给其他用户以完成/提交.

问题在于存储完成的表单提交.每个表单可以并且将在表单元素的数量和组合方面有所不同,并且对于关系数据库,我的选项在某种程度上局限于动态创建一个新表来保存每个表单的提交(似乎是一个坏的路径)或存储每个提交的表单都作为TEXT列中的JSON(丢失了所有有用的RDBMS查询功能)

我以前从未在生产项目中实际使用MongoDB,但我认为使用我的MySQL关系数据库存储我的应用程序的某些用户创建的所有表单,然后存储所有提交的内容可能是个好主意. MongoDB,每个文档引用MySQL中表单的UUID.

我用这种方法可以想到的第一个缺点是表单提交和MySQL中的表单之间没有引用完整性.如果我在MySQL中删除一个表单,则必须手动删除所有表单提交(如果我想复制'Cascade'效果)

我是否会将单个MongoDB集合中所有表单的所有表单提交存储为单独的文档?任何意见是极大的赞赏.:)


编辑1 基于此处的文档:http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections

我现在正在考虑创建一个新的集合来保存每个独特表单类型的所有提交.


编辑2

经过一些仔细考虑和其他人的建议后,我决定放弃我的双数据库方法来解决这个问题,转而采用关系数据库模式,我认为这解决了创建动态表单和保存表单提交的问题.他们很容易查询复杂报告的方式.

在此输入图像描述

基本上,"表单"中的每个记录都代表一个由用户构建的唯一表单.'forms_fields'有一个引用表单的外键和一个带有选项的枚举类型:1.复选框2. textfield 3. textarea 4.选择5.多选6.日期

'forms_fields_options'包含选择字段所具有的所有'选项'.通过这三个表,用户可以创建自定义表单.

当另一个用户填写并提交表单时,会在forms_submissions中创建一条记录.对于每个字段,将在'forms_submissions_fields'中创建相应的记录,该记录引用表单提交和forms_fields_id.最终表'forms_submissions_options_multiselect'本质上是一个连接表,用于指示用户选择的多选表单字段中的哪些选项.

Mar*_*arc 7

我的一位同事最近主持了一个关于这个主题的网络研讨会,名为"使用MongoDB和RDBMS的混合应用程序".你可以在这里查看:http: //www.10gen.com/events/hybrid-applications

从评论中看来,您似乎已经决定采用RDBMS路线,但希望这可以为您提供未来项目的一些想法,或者对阅读此线程的其他人有益.

祝您的申请顺利!