-2

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

4

4 回答 4

2

CouchDB 提供了多种方法来建立各种文档/实体之间的关系。查看wiki 上的这篇文章以开始使用。

当来自关系背景时,趋势是在尝试解决问题时继续使用相同的术语和思维方式。了解 NoSQL 解决方案非常不同非常重要,否则它们没有真正的存在目的。您应该真正寻求了解这些不同的 NoSQL 解决方案是如何工作的,这样您就可以将它们与您的应用程序的需求进行比较,看看它是否合适。

于 2011-03-31T13:56:46.330 回答
1

尽管这对于大规模查询来说效率很低,但从技术角度来看,使用 XML 数据类型将允许您存储您想要的任何结构,该结构可以因行而异。

于 2011-03-31T14:37:40.393 回答
1

MongoDB = NoSQL = 无连接 - 永远不会。

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

MongoDB 中的替代方案:

  • 非规范化

  • 使用嵌入文档

  • 多个查询

于 2011-03-31T12:24:14.003 回答
0

不是我知道的,但是扮演自己的 EAV 并不难,毕竟它只有 3 张桌子 :)

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

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

假设您使用的是 .NET,定义您的 EAV 接口,创建一些 POCO,然后让实体框架或您选择的 ORM 为您连接关联。LINQ 非常适合这种操作。

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

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

于 2011-03-31T16:29:00.193 回答