在CMU 又发现一套很好的资源
https://15445.courses.cs.cmu.edu/fall2018/schedule.html
这个文集,就决定读薄这门课。希望对自学这门课的人有一定帮助吧。
前置课程 CSAPP(见我的CSAPP的文集)
编程语言C++ 11,简易教程 https://www.thegeekstuff.com/2016/02/c-plus-plus-11/
教材,https://www.db-book.com/db7/index.html
进入正题
什么是数据库
我们经常会发现,整个世界是具备一定的联系的。比如我买了一部IPHONE手机,你也买了一部。我在A班读书,你在B班读书。A班里有我,XXX,等40个同学。这些都是一个个的关系。
在计算机系统中,我是一个数据,班级是一个数据,为了把数据的内在联系进行建模就产生了关系型数据库的概念。
数据库也是很多电脑程序的最核心的组件。
举个简单的例子
我们现在有一组音乐家的信息,还有那些音乐家发布专辑的信息。 在没有数据库的时代,我们该如何保存查询这些信息呢?
一个经典的做法是存进CSV中。(这里要求你知道啥是CSV,不知道百度一下)
就会是如下这样
我们该如何找到Ice Cube
出道的年份呢?
我们可以用如下代码来做
这种做法是不足够好的,所以人们开始思考?
在数据完整性
上
- 我们该如何确保这个音乐家对每个专辑 都是同样的那个音乐家呢?
- 如果有人在出道日期上写了个‘哈哈哈’,怎么办呢
- 我们要如何存储多个音乐家合作发布的专辑呢?
在实现
上
- 如何找到一个特定的条目
- 有一个新的APP 想用同一个DB,怎么办
- 2个线程同时写同一个文件怎么办?
在持久化
上
- 如果在我们的程序更新记录时机器崩溃怎么办?
- 如果我们想在多台机器上复制数据库以获得高可用性,该怎么办?
这就引出了我们数据库管理系统(DBMS)
DBMS是允许应用程序存储和分析数据库中的信息的软件。
通用DBMS旨在允许数据库的定义,创建,查询,更新和管理。
下面引出2个新的词汇
data model:数据模型是用于描述数据库中的数据的概念的集合。
schema: 模式是使用给定数据模型对特定数据集合的描述。
DB 分类
最下面2个是弃用的
关系模型的三要素
structure结构:关系的定义及其结构内容。
integrity完整性:确保数据库的内容满足限制。
manipulation操纵:如何访问和修改数据库的内容。
一个关系 其实就是数据的一个列。是一个实体的一个属性。
在这个基础上,就会有一个或者一组属性可以唯一确定一个实例,我们称它为主键(primary key),在不指定主键,有些DB会增加一个隐式的主键。
外键指定来自一个关系的属性必须映射到另一个关系中的元组。
数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集
关系代数
σ Select
π Projection
∪ Union
∩ Intersection
-Difference
× Product
⋈ Join
其他关系代数
关系代数仍然定义了如何计算查询的HIGH-LEVEL的步骤。更好的方法是只指定自己要查询的内容,而忽略查询的细节,这就是SQL
如下 2种关系代数查询的内容是一致的
→ σ{b_id=102}(R⋈S) vs. (R⋈(σ{b_id=102}(S))
SQL 就是 同样的。
结语
数据库无处不在。
关系代数定义了在关系数据库上处理查询的原语。
当我们讨论查询优化+执行时,我们将再次看到关系代数。