Lecture #01: Relational Model & Relational Algebra
本文是对CMU15-445课程第一节笔记的一个粗略总结和翻译。仅供个人(M1kanN)复习使用。如果能对其他同学学习这门课有帮助的话,不胜荣幸。
1. Database
数据库(Database) 是一个有组织的、互相关联的、对现实世界的某些方面进行建模的集合。注意:数据库(DB) != 数据管理系统(DBMS)。Database management system是一种管理数据库的软件。 本笔记中,用一个存储着艺术家和对应的专辑信息的数据库作为例子,亦即数字音乐商店(A database that models adigital music store)。
2. Flat File Strawman
数据库常常以CSV(comma-separated value)文件的形式存储,由DBMS进行管理。每次应用程序要读取或者更新记录时,都必须解析文件(parse files)。
以数字音乐商店的例子,会有两个文件,一是艺术家,二是专辑。
每个实体都有自己的属性集,所以在每个文件中,不同的记录都用新的行来划分,而一条记录中的每个相应属性都用逗号隔开。
例子:
Name | Year | Coutry |
---|---|---|
Wu-Tang Clan | 1992 | USA |
Notorious BIG | 1992 | USA |
GZE | 1990 | USA |
关于平面文件(Flat File)
-
Data Integrity
数据完整性
-
Implementation
执行 -
Durability
耐受性
3. Database Management System
一个DBMS是一个能让应用在数据库中保存与分析数据的软件
通常,DBMS设计的目的是允许定义、创建、查询、更新和管理符合某种数据模型的数据库。
- Data model:
数据模型是描述数据库中数据的概念的集合。 - Schema:
模式是对基于数据模型的特定数据集合阿尼普拉提哦那的描述。
Early DBMSs
早期,数据库应用很难建立和维护,因为逻辑层和物理层之间存在着紧密的耦合。
- 逻辑层:
描述了数据库有哪些实体和属性。 - 物理层:
是这些实体和属性的存储方式。
所以早期的数据库,一旦改变了物理层,逻辑层也得跟着变。
4. Relational Model
人们每次改变物理层都要重新写数据管理系统,故Ted Codd注意到后提出了关系模型。
-
Relational Model:
关系模型定义了一个基于关系的数据库抽象概念,有3个关键点:
- Store database in simple data structures (relations).
- Access data through high-level language, DBMS figures out best execution strategy.
- Physical storage left up to the DBMS implementation.
简单来说就是:用简单的数据结构保存,用高级语言来访问,并让DBMS来执行最优策略以及处理物理层存储。
-
关系模型定义的三个概念:
- Structure:
关系定义和内容。也就是关系具有的属性以及可以有的值。 - Integrity:
确保数据库的内容满足约束条件。比如:年份必须是数字。 - Manipulation:
如何访问和修改数据库的内容。
- Structure:
-
关系:
关系是一个无序的集合(unordered_set),包含代表的实体的属性关系。因为是无序的,所以DBMS可以用它想要的任何方式存储它们,并允许优化。 -
元组(tuple):
元组指的是关系中的一组属性值(也叫域 domain)。起初,值必须是原子的或者标量,但现在值也可以是一个特殊的值--NULL
,表示为定义。 -
有n个属性的关系,叫做:n-ary relation。
-
Keys:
一个关系的primary key唯一的定义了单个元组。很多DBMSs都支持autogenerated keys,所以程序就不需要手动增加了,但primary key还是在某些DBMSs是需要的。- Primary key:唯一的定义了单个元组。
- Foreign key:指定一个关系中的属性必须映射到另一个关系中的元组。
5. Data Manipulation Languages (DMLs)
有两类语言去保存和检索在数据库中的信息。
- Procedural:
The query specifies the (high-level) strategy the DBMS should use to find the desired result based on sets / bags. (relational algebra) - Non-Procedural(Declarative):
The query specifies only what data is wanted and not how to find it. (relational calculus)
一般现在都是用第二种的,我不管DBMS用什么策略,我只需要你给我我想要的数据。
6. Relational Algebra
关系代数就是一组基本操作,用于检索和操作关系中的图元。(感觉这部分不需要很了解,毕竟我学数据库只是为了混个项目)每个操作符都需要一个或多个关系作为输入,并输出一个新的关系。为了编写查询,我们可以把这些运算符 "链 "在一起,以创建更复杂的操作。
- Select
常用操作 - Projection
映射。配合R使用。 - Union
并 - Intersection
交 - Difference
差 - Product
笛卡尔积 - Join
常用操作。有left join, right join, full join, natural join(SQL标准) - Observation
不同的表达式可能是一样的内容。