持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
什么是数据库
初学者可能会将数据库和数据库系统(DBMS)搞混,数据库是一种严格组织、有内在联系的数据集合,在形式上像表格。它存储在comma-separated value(CSV)格式文件中受DBMS管理,每次要读取或更新记录时都必须解析文件,database中每个实体都有自己的属性集,因此在每个文件中,不同的记录由新行分隔,而记录中的每个相应属性由逗号分隔。
关系型模型
早期的数据库没有固定模型,每次变动都要重写代码,Ted Codd在1970发明了关系模型(relational model)去定义database,这种关系模型具有三大关键点
- 以简单的数据结构存储数据,这里的数据结构就是关系(relation)
- 通过高级语言访问数据
- 物理存储由系统实现,不用人管
数据模型是是描述数据库中数据的一组概念,关系模型是数据模型的一种,其它还有非关系模型,具体如图
schema是由一种数据模型具象化数据的描述,关系模型定义下的数据库有三个概念
- structure:关系及其内容的定义,这是关系所具有的属性以及这些属性可以包含的值。
- integrity:确保数据库的内容满足约束条件。
- Manipulation:如何访问和修改数据库的内容。
关系是一个无序的集合,它包含表示实体的属性之间的关系。由于这些关系是无序的,DBMS可以以任何它想要的方式存储它们,以便进行优化。
tuple是关系中的一组属性值(也称为域)。最初,属性值必须是原子量,也就是整型、布尔型等,但现在值也可以是列表或嵌套数据结构。每个属性都可以是一个特殊值NULL,意思是属性是未定义的。一个有n个属性的关系称为n元关系。
一个primary key唯一标识一个tuple,如果没有定义一个内部的primary key,那么系统会为其生成
一个foreign key指定一个relation中的属性必须映射到另一个relation的tuple。
关系运算符
relational algebra是一组在关系中检索和操作tuple的基本操作,每个操作符都接受一个或多个relation作为输入,并输出一个新的relation,我们也可以将这些操作链接在一起。
上图左边是经典的relational algebra,右边是后人总结常用操作,这里我们介绍左边的部分。符号与操作一一对应
relational algebra定义了基础操作,我们利用运算符编写查询步骤,这些在元操作层面上是最有效的,但是组合之后的操作效果与怎样编写SQL有很大的关系。例如下边的操作右边比左边快很多。有时候更好的方法是说出你想要的结果,然后让DBMS决定它想要采取的步骤来计算查询。SQL将完全做到这一点,它是在关系模型数据库上编写查询的事实上的标准。
对于数据库架构,我们可以分层将数据库的架构分解为以下5个层级,分别是磁盘管理、缓存池管理、数据访问方法、算子执行、查询计划
接下来首先我们就会围绕这5个层级分别进行深入探讨
之后我们会涉及到关系数据库数据库的某些领域重点内容,如查询优化、并发控制、日志与恢复、分布式数据库等。