全书目录

第十九篇:MongoDB 完全指南 —— 弹性档案仓宇宙

第十二章:模式设计 —— 先想访问路径,再摆档案柜

1 分钟 405 字 第 363 / 962 个阅读单元

MongoDB 的模式设计,核心不是“第三范式”,而是:

数据如何被读,如何被写,如何一起被访问。

一句话原则:

text
一起访问的数据,尽量放在一起

设计时可以用这套顺序:

  1. 先列出最重要的查询
  2. 再列出最高频的写入
  3. 判断哪些数据总是一起出现
  4. 判断哪些子结构会无限增长
  5. 决定嵌套、引用,还是混合方案
  6. 最后再为关键查询配索引

看一个电商商品页例子。

用户打开商品页时,往往要同时看到:

  • 商品基本信息
  • 当前价格
  • 库存
  • 前几条精选评论

那一个常见设计是:

  • 商品主文档里嵌入“展示所需的核心字段”
  • 评论单独放集合
  • 需要时再按商品 ID 查询评论
  • 如果首页只展示少量最新评论,也可以冗余几条摘要

这就是典型的按访问路径设计,不是按理论实体图死拆。

灵活结构成熟后,通常还会配上模式验证,避免仓库逐渐失控。比如:

javascript
db.createCollection("products", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["name", "price", "status"],
      properties: {
        name: { bsonType: "string" },
        price: { bsonType: "decimal" },
        status: { enum: ["draft", "active", "archived"] }
      }
    }
  }
})

这相当于在弹性档案仓门口加规则:

  • 档案袋仍然可以灵活
  • 但关键栏位必须合法
  • 不允许把明显错误的资料塞进仓库