sql - 如何修复我在 nosql (mongodb) 中的 m..n 关系?

标签 sql mongodb database-design database nosql

起初我试图建立一个集会(你知道有司机的汽车......)数据库。我有两个集合:drivers { name, address, sex, ... } 然后是另一个 tournaments { name, location, price, ... }

我尽量保持简单。在锦标赛中应该有车手(因为没有车手的锦标赛......好吧,这并不好^^)。还有我的问题,在普通的 sql 数据库中,我可以选择两个主键(让我们说 name in drivers 和 name in tournaments - 只是为了简单起见,我知道 name 作为主键并不好)。因为它是一个 m..n 关系(对吗?)我会制作一个 3. 表,其中包含两个主键。好的,那很容易。但是我应该如何在mongodb中解决这个问题。我想是这样的:tournaments { name, location, price, ... drivers { driver_1, ..., driver_n } } ,但我不确定。我正在使用 Java,所以我可以创建一些特殊的类来处理这个关系问题?我不明白其他的 mongodb 教程。有任何想法吗?感谢您的帮助!

最佳答案

有几种方法可以做到这一点:

  1. 正如@Gianluca 所述,您可以通过将车手的 _id ObjectId 或其他标识属性(可能是您拥有唯一索引的属性)添加到锦标赛文档中的“drivers”数组来手动执行此链接.例如锦标赛:{ ... 司机:["6019235867192384", "73510945093", ...]}
  2. 专门为此引用构建的另一个选项是 DBRef 规范,它提供了一种更正式的方法,可能更类似于您在 SQL 世界中所熟悉的方法。 DBRef 由 java 驱动程序支持,并允许您将引用范围限定为一个集合(基本上说明该引用的来源)。如果 MongoDB 的 future 版本支持交叉集合查询,我不会感到惊讶,尽管目前不支持。

更多信息 here .

此外,如果您不使用 DAO 框架,我会建议 Morphia它通过一个很好的 @Reference 注释支持 DBRef。

关于sql - 如何修复我在 nosql (mongodb) 中的 m..n 关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8592188/

相关文章:

java - 在 Spring Data MongoDB 中使用 List 参数进行存储库查询

mongodb - 与 skip() 和 limit() 一起使用的 Distinct() 命令

php - 将用户评论存储在数据库中

mysql - 想要 mysql 中给定表的所有列的唯一值

mysql - 在带有子查询的删除语句中使用 EXISTS 代替 IN 运算符

c# - MongoDB 驱动程序 2.2 的动态类型 - 如何不序列化 _t 类型鉴别器?

mysql - 数据库设计——关系与属性

python - 如何提高报告处理时间(Django/MySQL)?

sql - TSQL - 计算多语句表 UDF 中的特定值并将它们传递给附加列

SQL LEFT JOIN 与 WHERE 类