数据库 1:基本概念与关系代数
数据库系统的基本概念
数据库系统的组成
数据库 Database (DB)
数据库管理系统 Database Management System (DBMS)
数据库应用 Database Application (DBAP)
数据库管理员 Database Administrator (DBA)
DBA 通过 DBMS 管理 DB,DBMS 利用 DB 中的数据提供 DBAP。DBMS 提供
数据定义语言 Data Definition Language (DDL) 供 DBAP 创建数据库,定义数据结构。
数据操纵语言 Data Manipulation Language (DML) 供 DBAP 进行 CRUD 操作。
数据控制语言 Data Control Language (DCL) 供 DBAP 对 DB 进行控制。
DDL, DML 和 DCL 构成结构化查询语言 Structured Query Language (SQL)。除了 SQL 这样的交互式语言外、还有嵌入式的数据库语言,如 C/C++ 中的 mysql.h
。
数据库的结构
定义「模式」为对数据结构的描述(表头),「视图」为某一种模式下表现的数据(表的内容)。数据库系统有三级模式,对应三级视图。
外部模式 / 外部视图 External:用户能看到与处理的结构。
概念模式 / 概念视图 Conceptional:逻辑化的数据结构(即 E-R 图所能表现的)。
内部模式 / 内部视图 Internal:存储在介质上的结构。
E-C 和 C-I 两层中间存在映像,实现层间转换。I 层变化可以不改变 C 层——物理数据独立性,而 C 层改变也可以不影响 E 层——逻辑数据独立性。
数据模型
三要素:数据结构、数据操作和完整性约束。
关系模型:以「表」为载体。
层次模型:以「树」为载体。
数据结构简单清晰
性能优于关系数据库,不低于网状数据库。
局限性:不是所有关系都是层次的。
网状模型:以「图」为载体。
结构复杂、语言复杂、难用
能更直接地表示现实世界。
关系模型
关系的定义
简单来说就是「表」。
游戏名 Name | 运营公司 Company | 游戏类型 Type |
---|---|---|
원신 | Mihoyo | 开放世界冒险 |
王者荣耀 | Tencent | MOBA |
明日方舟 | HyperGraph | 塔防策略RPG |
塞尔达传说:旷野之息 | Nintendo | 动作冒险 |
域 Domain:表中的一列,一组相同数据类型的值的集合。比如 \(D_\text{Name}=\{\text{원신}, \text{王者荣耀}, \cdots\}\)。在关系中称为「属性」。
元组 Tuple:表中的一行。
笛卡儿积 Cartesian Product:多个域取一个元素拼接。笛卡儿积中的每个元素都是一个元组。
关系 Relation:笛卡儿积中有意义的部分,即一组域 \(D_1\times D_2\times\cdots\times D_n\) 的子集,记为 \(R(A_1, A_2, \cdots, A_n)\)。
定义
候选码 Candidate Key:关系中的一个属性集合,能最小唯一标识一个元组。
主码 Primary Key:CK 中选定一个。
主属性、非主属性:在任意一个 CK 中的属性都是主属性,反之为非主属性。
外码 Foreign Key:关系中的一个属性组,不是此关系的 CK,但是另一个关系的 CK。
超码:CK 的超集,能唯一标识一个元组,不一定是最小的。
关系完整性
实体完整性(PK 约束):PK 非空。
参照完整性(FK 约束):FK 要么存在要么空。
用户自定义的完整性。
关系代数
关系代数的基本操作分为集合操作和纯关系操作,集合操作有交、并、差以及笛卡儿积,纯关系操作有:
选择 Select
\(\sigma_\text{条件}(R)=\{t|t\in R\wedge \text{条件为真}\}\)
投影 Project
\(\Pi_{A_{a_1}, A_{a_2}, \cdots, A_{a_n}}(R)=R\text{ 中只有 }A_{a_1}, \cdots, A_{a_n}\text{ 属性的部分}\)
\(\theta\)-连接 \(\theta\)-Join
\(R\underset{A\theta B}\bowtie S=\sigma_{t[A]\theta s[b]}(R\times S)\)
当关系 \(\theta\) 是等于时,称等值连接;当等值连接时使用相同属性组时,称自然连接。