目录

《数据密集型应用系统设计》第2章-数据模型与查询语言

关系型数据库

以一份简历为例,关系型数据库将其保存为主表和多个表,然后通过外键关联:

https://raw.githubusercontent.com/boatrainlsz/my-image-hosting/main/Screenshot_select-area_20240224152956.png

关系型数据库定义了很多种范式,实际这些范式价值并不大。一个经验法是:如果复制了多份重复的数据,则违反了规范化,是不可取的。

文档型数据库

以一份简历为例,文档型数据库将其保存为一个JSON文档:

{
	"user_id": 251,
	"first_name": "Bill",
	"last_name": "Gates",
	"summary": "Co-chair of the Bill & Melinda Gates... Active blogger.",
	"region_id": "us:91",
	"industry_id": 131,
	"photo_url": "/p/7/000/253/05b/308dd6e.jpg",
	"positions": [{
			"job_title": "Co-chair",
			"organization": "Bill & Melinda Gates Foundation"
		},
		{
			"job_title": "Co-founder, Chairman",
			"organization": "Microsoft"
		}
	],
	"education": [{
			"school_name": "Harvard University",
			"start": 1973,
			"end": 1975
		},
		{
			"school_name": "Lakeside School, Seattle",
			"start": null,
			"end": null
		}
	],
	"contact_info": {
		"blog": "http://thegatesnotes.com",
		"twitter": "http://twitter.com/BillGates"
	}
}

文档型数据库适用于这种一对多的关系(positions、education),它通常是一次加载整棵树。但是对于多对多的关系支持得不是很好。

图数据库

图数据库通常有两种表示方法或其变体:

属性图

https://raw.githubusercontent.com/boatrainlsz/my-image-hosting/main/Screenshot_select-area_20240224153913.png

顶点包括:

  1. 唯一的标识符
  2. 出边集合
  3. 入边集合
  4. 属性集合

边包括:

  1. 唯一的标识符
  2. 边的起始点
  3. 边的终点
  4. 描述两个顶点之间关系类型的标签
  5. 属性集合

三元存储

三元存储采取(主体,谓语,客体)的形式存储关系。其中主体相当于图中的起始点,而客体是以下两种情况之一:

  1. 原始数据类型,比如(lucy,age,33)
  2. 图中的另一个顶点,即终点。比如(lucy,married,bob)