在 NoSQL 数据存储中建模关系绝对是有效的,但如果您有高度相关的数据,您可能需要重新考虑您选择的数据存储和模式设计是否符合您的用例目标。
在 MongoDB 中,一个常见的决定(基于您的用例)是是否更适合通过将相关数据嵌入同一集合中或使用链接到另一个集合中的文档的引用来建模关系(请参阅:Data Model Design in MongoDB 手册)。
外键关系通常不会通过分布式 NoSQL 数据库的服务器端支持来填充或强制执行,因此 ODM 中的声明性引用通常会转换为服务器上的多个查询。多个查询不一定是坏事(尽管可能有写得很糟糕的极端情况),使用引用的应用程序级数据连接可能非常方便。
特别是对于 MongoDB,数据库引用 (DBRefs)有一个 BSON 字段类型。目前(在 MongoDB 2.6 中)不支持 DBRefs 的服务器端扩展,但是许多驱动程序和 ODM 提供了方便的方法来遵循和填充此标准表示法中的引用。
您可以看到在您提到的一些 ODM 中使用了这一点:
- Mongoose 支持来自其他集合的文档数量
- Doctrine ODM 支持引用映射关系到其他类/集合
通常,ODM 提供自动填充引用或惰性填充(即根据需要或在代码中访问)的选择。
我不熟悉 Cassandra 库,但在文档中没有看到任何明显提及引用或关系的内容。我会假设关系特征的存在(或不存在)更多是 ODM 的作者的选择,而不是特定的模式/反模式。