MongoDB数据库设计准则

本文介绍了MongoDB数据库设计的两种主要方法:嵌入式文档和引用式文档。嵌入式文档适用于与父文档一起显示的数据,能提高检索效率。而引用式文档用于处理复杂的多对多关系或大型数据集,以避免数据冗余。根据不同的业务需求,选择合适的文档设计策略以平衡数据存储和查询效率。
摘要由CSDN通过智能技术生成

1.嵌入式文档
如果需要在其它文档上下文(父文档)查看某个数据,则选择把该数据嵌入指定上下文中。
例如:在应用中,地址信息通常不是单独显示而是随着个人信息一起显示,在这种场景之下应该采用嵌入式文档。

{
   _id: "joe",
   name: "Joe Bookreader",
   addresses: [
                {
                  street: "123 Fake Street",
                  city: "Faketon",
                  state: "MA",
                  zip: "12345"
                },
                {
                  street: "1 Some Other Street",
                  city: "Boston",
                  state: "MA",
                  zip: "12345"
                }
              ]
 }

优点:检索该文档的全部信息只用一次查询即可。

2.引用式文档
采用时机:

  1. 表现复杂的多对多关系
  2. 文档具有较大的层次数据集(一个文档最大只能存储16M)
  3. 嵌入式带来数据冗余,但是读取效率又不能远远超过数据冗余所带来的牺牲
嵌入式
{
   title: "MongoDB: The Definitive Guide",
   author: [ "Kristina Chodorow", "Mike Dirolf" ],
   published_date: ISODate("2010-09-24"),
   pages: 216,
   language: "English",
   publisher: {
              name: "O'Reilly Media",
              founded: 1980,
              location: "CA"
            }
}

{
   title: "50 Tips and Tricks for MongoDB Developer",
   author: "Kristina Chodorow",
   published_date: ISODate("2011-05-06"),
   pages: 68,
   language: "English",
   publisher: {
              name: "O'Reilly Media",
              founded: 1980,
              location: "CA"
            }
}

上述模型造成了发布者数据重复,为了改善这种情况可采用引用式。引用式又分两种情况:

1.多的一端只是许多,不是特多,有数量范围的,则可以把引用放在发布者一端

**publisher**
{
   name: "O'Reilly Media",
   founded: 1980,
   location: "CA",
   books: [123456789, 234567890, ...]
}

**book**
{
    _id: 123456789,
    title: "MongoDB: The Definitive Guide",
    author: [ "Kristina Chodorow", "Mike Dirolf" ],
    published_date: ISODate("2010-09-24"),
    pages: 216,
    language: "English"
}

{
   _id: 234567890,
   title: "50 Tips and Tricks for MongoDB Developer",
   author: "Kristina Chodorow",
   published_date: ISODate("2011-05-06"),
   pages: 68,
   language: "English"
}

2.多的一端,数量极大,无法估量。则将”one”端的引用放在”many”的一端

**publisher**
{
   _id: "oreilly",
   name: "O'Reilly Media",
   founded: 1980,
   location: "CA"
}
**book**
{
   _id: 123456789,
   title: "MongoDB: The Definitive Guide",
   author: [ "Kristina Chodorow", "Mike Dirolf" ],
   published_date: ISODate("2010-09-24"),
   pages: 216,
   language: "English",
   publisher_id: "oreilly"
}

{
   _id: 234567890,
   title: "50 Tips and Tricks for MongoDB Developer",
   author: "Kristina Chodorow",
   published_date: ISODate("2011-05-06"),
   pages: 68,
   language: "English",
   publisher_id: "oreilly"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值