数据库 1:基本概念与关系代数
2023 年 2 月 7 日
数据库系统的基本概念 #
数据库系统的组成 #
- 数据库 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$ 是等于时,称等值连接;当等值连接时使用相同属性组时,称自然连接。