MongoDB架构设计 - 新的集合或参考?

时间:2011-01-03 08:39:26

标签: mongodb

我遇到了一个关于MongoDB架构的问题。参考 MongoDB Schema Design 上的示例,关于db.students和db.courses。

由于我更习惯于SQL结构化,我仍然对此引用或嵌入问题感到困惑。因此,该示例仅显示db.students中的课程,并引用db.courses。因此,如果我要对humanitieslanguages等课程进行分类,我应该怎么做?

什么是更好的方法呢?

    1.创建一个名为`db.categories`的集合并引用db.courses到它?
// db.courses
{ name: Biology, cat: 1 }
{ name: English, cat: 2 }

// db.categories
{ cat: 1, name: Humanities }
{ cat: 2, name: Languages }
    2.刚刚嵌入课程?
// db.courses
{ name: Biology, cat: Humanities }
{ name: English, cat: Languages }
{ name: History, cat: Humanities }

有人可以请您提出建议,我应该做什么?

谢谢。

1 个答案:

答案 0 :(得分:3)

<强>简介

在你的情况下,两种变体都会很好,因为类别只是枚举你不需要加载类别才能显示课程,你只需要创建一些枚举并按id获取类别名称。

但是在例如,如果你有表db.users并且每个用户都有db.courses的集合,你不需要创建单独的文档,你只需要嵌套的集合课程。它真的很酷,因为在sql中你需要创建一个具有一对多引用的单独表。

文档数据库的一大好处是,您可以使用嵌套集合创建大型文档,而无需连接表。

<强>答案:

所以在你的情况下,我建议两种方式:

  1. 为类别创建枚举并按ID获取类别名称(但不从mongo加载)。
  2. 只需在课程中复制类别名称(但第一种情况更好,因为如果更改了类别名称,则需要使用新的类别名称更新每个课程)。