SQL Server是否具有对EAV的本机支持

时间:2011-03-31 11:51:25

标签: sql-server mongodb couchdb database-schema schema-design

我喜欢CouchDB和MongoDB的灵活架构功能,但我也喜欢SQL Server的关系“连接”功能。我真正想要的是能够拥有像PERSON,COMPANY和ORDER这样的表,这些表基本上是“开放模式”,其中每个表都有一个ID,但其余的列都定义为json样式{ID:12,firstname:"Pete",surname:"smith",height:"180"},但是我可以直接或通过多对多外部参照表有效地将PERSON加入公司。有谁知道SQL Server是否有计划在SQL中加入'开放模式',或者Mongo或Couch是否有计划支持高效加入?非常感谢。

4 个答案:

答案 0 :(得分:2)

CouchDB提供了多种方法来建立各种文档/实体之间的关系。查看维基上的this article即可开始使用。

当来自关系背景时,倾向于在尝试解决问题时继续使用相同的术语和思维方式。理解NoSQL解决方案非常不同非常重要,否则它们对现有解决方案没有任何实际意义。您应该真正了解这些各种NoSQL解决方案的工作原理,以便您可以将它们与应用程序的要求进行比较,看看它是否合适。

答案 1 :(得分:1)

MongoDB = NoSQL =没有加入 - 永远不会。

如果由于您的数据模型或项目要求而需要JOIN:请使用RDBMS。

MongoDB中的替代方案:

  • 非正规化

  • 使用嵌入式文档

  • 多个查询

答案 2 :(得分:1)

从技术的角度来看,大规模查询效率很低,使用XML数据类型可以存储您想要的任何可能因行而异的结构。

答案 3 :(得分:0)

不是我知道的,但是你自己的EAV角色并不难,毕竟它只有3张表:)

  • 实体存储关联的表名。
  • 属性存储列名,数据类型以及是否可以为空。
  • Value包含每个所需数据类型的一个可空列。

实体1 .. *属性1 .. *值

假设您正在使用.NET,请定义您的EAV界面,创建一些POCO,然后让Entity Framework或您选择的ORM为您连接关联。 LINQ非常适合这种操作。

它还允许您创建混合模型,其中已知模式的某些部分,但您仍需要自定义数据的灵活性。如果您考虑到这一点设计域模型(即使用模型中的EAV接口),可以将EAV烘焙到EF数据上下文(或其他任何内容),以自动加载每个实体的属性及其值。您的EF实体只需要知道它属于哪个表实体。

当然,这不是完美的解决方案,因为您(可能)可以灵活地交易性能。根据您要保留的数据量和性能要求,它可能更适合于大多数模式已知且较小百分比未知的模型。 YMMV。