mongodb基础

MongoDB 3.4 学习笔记 (三):非关系数据库的 Sch

2017-06-09  本文已影响53人  wlszouc

1. 非关系数据库的 Schema

1.1. Schema 设计原则

数据库 Schema 设计是基于数据库特性、数据属性和应用系统选择最好的数据表示形式的过程。关系数据库中的范式即是 Schema 设计原则。

1.1.1. Schema 基础

1.1.1.1. 一对一

一对一的关系是描述两个实体之间的唯一关系。

模型:

// 用户文档:
{
  name: "Peter Wilkinson",
  age: 27
}
// 地址文档
{
  street: "100 some road",
  city: "Nevermore"
}

很明显在非关系数据库中,内嵌方式更有效。

1.1.1.2. 一对多

一对多的关系主要体现在其中一方的实体对应另一方多个实体,其中博客和评论尤为典型:

模型:

// 博客文档
{
  title: "An awesome blog",
  url: "http://awesomeblog.com",
  text: "This is an awesome blog we have just started"
}
// 评论文档
{
  name: "Peter Critic",
  created_on: ISODate("2014-01-01T10:01:22Z"),
  comment: "Awesome blog post"
}
{
  name: "John Page",
  created_on: ISODate("2014-01-01T11:01:22Z"),
  comment: "Not so awesome blog"
}

1.1.1.3. 多对多

双方的实体间都对应了多个关系即为多对多关系。典型代表是图书与作者:

1.1.2. 实例

在非关系数据库中没有固定的 Schema 设计原则,它是弹性的可根据多种因素灵活选择。下面通过商品实例分析非关系数据库的 Schema 设计思想:

{
  _id: ObjectId("4c4b1476238d3b4dd5003981"), 
  slug: "wheelbarrow-9092",
  sku: "9092",
  name: "Extra Large Wheelbarrow",
  description: "Heavy duty wheelbarrow...",
  details: {
    weight: 47,
    weight_units: "lbs",
    model_num: 4039283402,
    manufacturer: "Acme",
    color: "Green"
  },
  total_reviews: 4,
  average_review: 4.5,
  pricing: {
    retail: 589700,
    sale: 489700,
  },
  price_history: [
    {
      retail: 529700,
      sale: 429700,
      start: new Date(2010, 4, 1),
      end: new Date(2010, 4, 8)
    },
    {
      retail: 529700,
      sale: 529700,
      start: new Date(2010, 4, 9),
      end: new Date(2010, 4, 16)
    },
  ],
  primary_category: ObjectId("6a5b1476238d3b4dd5000048"),
  category_ids: [
    ObjectId("6a5b1476238d3b4dd5000048"),
    ObjectId("6a5b1476238d3b4dd5000049")
  ],
  main_cat_id: ObjectId("6a5b1476238d3b4dd5000048"),
  tags: ["tools", "gardening", "soil"],
}
上一篇下一篇

猜你喜欢

热点阅读