我喜欢CouchDB和MongoDB的灵活架构功能,但我也喜欢SQL Server的关系“连接”功能。我真正想要的是能够拥有像PERSON,COMPANY和ORDER这样的表,这些表基本上是“开放模式”,其中每个表都有一个ID,但其余的列都定义为json样式{ID:12,firstname:"Pete",surname:"smith",height:"180"}
,但是我可以直接或通过多对多外部参照表有效地将PERSON加入公司。有谁知道SQL Server是否有计划在SQL中加入'开放模式',或者Mongo或Couch是否有计划支持高效加入?非常感谢。
答案 0 :(得分:2)
CouchDB提供了多种方法来建立各种文档/实体之间的关系。查看维基上的this article即可开始使用。
当来自关系背景时,倾向于在尝试解决问题时继续使用相同的术语和思维方式。理解NoSQL解决方案非常不同非常重要,否则它们对现有解决方案没有任何实际意义。您应该真正了解这些各种NoSQL解决方案的工作原理,以便您可以将它们与应用程序的要求进行比较,看看它是否合适。
答案 1 :(得分:1)
MongoDB = NoSQL =没有加入 - 永远不会。
如果由于您的数据模型或项目要求而需要JOIN:请使用RDBMS。
MongoDB中的替代方案:
非正规化
使用嵌入式文档
多个查询
答案 2 :(得分:1)
从技术的角度来看,大规模查询效率很低,使用XML数据类型可以存储您想要的任何可能因行而异的结构。
答案 3 :(得分:0)
不是我知道的,但是你自己的EAV角色并不难,毕竟它只有3张表:)
实体1 .. *属性1 .. *值
假设您正在使用.NET,请定义您的EAV界面,创建一些POCO,然后让Entity Framework或您选择的ORM为您连接关联。 LINQ非常适合这种操作。
它还允许您创建混合模型,其中已知模式的某些部分,但您仍需要自定义数据的灵活性。如果您考虑到这一点设计域模型(即使用模型中的EAV接口),可以将EAV烘焙到EF数据上下文(或其他任何内容),以自动加载每个实体的属性及其值。您的EF实体只需要知道它属于哪个表实体。
当然,这不是完美的解决方案,因为您(可能)可以灵活地交易性能。根据您要保留的数据量和性能要求,它可能更适合于大多数模式已知且较小百分比未知的模型。 YMMV。