MongoDB 数据建模最佳实践
学习文档数据库设计原则:嵌入 vs 引用,以及反范式化。 · 难度:入门 · +15XP
文档模型设计
MongoDB 使用灵活的文档模型。设计时需考虑:数据访问模式、关系类型(1:1, 1:N, N:M)和写入/读取比例。
嵌入 vs 引用
| 场景 | 推荐方式 | 示例 |
|---|---|---|
| 子数据总是与父数据一起读取 | 嵌入 | 用户与地址 |
| 子数据独立访问或数据很大 | 引用 | 订单与商品 |
| 多对多关系 | 引用 | 学生与课程 |
反范式化
为了提高读取性能,有时需要反范式化(冗余存储)。例如在订单中直接存储用户名,避免每次查询用户表。
// 嵌入式设计
{
_id: 1,
name: "Alice",
orders: [
{ orderId: 101, amount: 50 },
{ orderId: 102, amount: 30 }
]
}模式设计模式
常见模式:属性模式(存储键值对)、桶模式(按时间分组)、多态模式(不同结构相同集合)等。
练习提示
为一个博客系统设计数据模型:包含用户、文章和评论。考虑嵌入评论还是引用?为什么?