原文筆記
本課程筆記資料庫系統 · 30 篇
01 数据库基础与关系模型
这一章主要对应选择题、填空题、简答题,也会支撑后面的设计题和恢复并发题。
一、数据库系统基本概念
DB、DBMS、DBS
- DB:Database,数据库,是长期存储在计算机内、有组织、可共享的数据集合。
- DBMS:Database Management System,数据库管理系统,是位于用户和操作系统之间的数据管理软件。
- DBS:Database System,数据库系统,通常包括数据库、DBMS、应用程序、数据库管理员 DBA、用户等。
关系:DBS 包括 DB 和 DBMS。考试经常问“三者关系”和“数据库系统核心”,答案分别是 DBS 包括 DB 和 DBMS、DBMS。
数据库系统的特点
数据库系统相对文件系统的主要优点:
- 数据结构化:这是数据库系统与文件系统的本质区别。
- 数据共享性高,冗余度低,易扩充。
- 数据独立性高:应用程序尽量不受数据逻辑结构和物理存储变化影响。
- 数据由 DBMS 统一管理和控制:包括安全性、完整性、并发控制、恢复。
常见陷阱:“数据冗余度大”不是数据库系统特点,而是文件系统常见问题。
二、数据模型
数据模型通常由三部分组成:
- 数据结构:描述数据对象及对象之间的联系,是静态特征。
- 数据操作:描述允许对数据做什么,如查询、插入、删除、修改,是动态特征。
- 完整性约束:描述数据必须满足的语义规则。
常见数据模型:
- 层次模型:树结构,一个子结点至多一个父结点。
- 网状模型:图结构,CODASYL/DBTG 是代表。
- 关系模型:用二维表/关系表示数据和联系。
- E-R 模型:概念模型,用实体、属性、联系描述现实世界。
概念模型独立于具体机器和 DBMS;E-R 图用于概念结构设计,不是逻辑设计或物理设计。
三、三级模式与两级映像
数据库系统常用三级模式结构:
- 外模式:用户或应用程序看到的局部逻辑结构,也叫子模式、用户模式。
- 模式:数据库的全局逻辑结构,也叫概念模式。
- 内模式:数据在物理存储层面的描述,也叫存储模式。
两级映像:
- 外模式/模式映像:保证逻辑独立性。
- 模式/内模式映像:保证物理独立性。
物理独立性:数据的物理存储位置、存储结构、存取路径改变时,应用程序不需要修改。
逻辑独立性:数据库的全局逻辑结构改变时,外模式和应用程序尽量不需要修改。
考试问“要保证数据独立性,需要修改什么”,答:三级模式之间的两种映像。
四、关系模型基本术语
关系模型的基本数据结构是关系。关系可以理解为二维表,但要满足关系模型规则。
常用术语:
- 域:一组具有相同数据类型的值的集合。
- 笛卡尔积:多个域所有可能组合的集合。若
|D1|=2, |D2|=2, |D3|=2,则基数为2*2*2=8。 - 关系:域的笛卡尔积的子集。
- 元组:关系中的一行。
- 属性:关系中的一列;现实世界的“特征”对应数据世界的属性。
- 码/键:能唯一标识元组的属性组。
- 超码:能唯一标识元组的属性组,可包含多余属性。
- 候选码:最小超码,不含多余属性。
- 主码:从候选码中选定的一个。
- 主属性:包含在任一候选码中的属性。
- 非主属性:不包含在任何候选码中的属性。
- 外码:一个关系中的属性或属性组,引用另一个关系的主码。
关系的性质:
- 列是同质的,每列来自同一域。
- 不同列可以来自同一域,但属性名必须不同。
- 列的顺序可交换。
- 行的顺序可交换。
- 任意两个元组不能完全相同。
- 每个分量必须是不可再分的数据项,这是 1NF 的要求。
五、关系完整性
关系模型有三类完整性:
- 实体完整性:主码属性不能为空,且主码值唯一。
- 参照完整性:外码值要么为空,要么等于被参照关系中某个主码值。
- 用户自定义完整性:由具体业务定义,如年龄范围、性别取值、工资下限。
例子:
Sno char(9) PRIMARY KEY
FOREIGN KEY (Sno) REFERENCES Student(Sno)
CHECK (Age BETWEEN 18 AND 55)
CHECK (Sex IN ('男', '女'))
安全性与完整性区别:
- 安全性:防止非法用户非法访问,关键词是授权、口令、角色、视图保护、审计。
- 完整性:防止合法用户输入或产生不符合语义的数据,关键词是主键、外键、CHECK、触发器。
“年龄限制 16-25 岁”是完整性,不是安全性。“授权”和“撤权”是安全性。
六、关系代数基础
五种基本运算常见说法:并、差、笛卡尔积、选择、投影。交、连接、自然连接、除法可由基本运算导出。
选择 σ:按条件选行。
σ_{Age > 20}(Student)
投影 π:选列,并消去重复元组。
π_{Sno, Sname}(Student)
连接 ⋈:按条件把两个关系相关元组拼接。
Student ⋈_{Student.Sno = SC.Sno} SC
自然连接:在公共属性上做等值连接,并去掉重复公共属性列。
除法:表达“全部”“至少包含全部”这类查询,例如“选修了所有课程的学生”。SQL 中通常用双重 NOT EXISTS。
七、NULL 与视图
NULL 表示未知、不存在或不适用,不等于 0、空格或空字符串。判断 NULL 必须写:
WHERE Sage IS NULL
WHERE Sage IS NOT NULL
不能写:
WHERE Sage = NULL
WHERE Sage != NULL
视图是从一个或多个基本表导出的虚表。数据库中只保存视图定义,不保存视图对应的数据。
视图优点:
- 简化用户查询。
- 使用户以不同角度看同一数据。
- 提供一定逻辑独立性。
- 可以作为安全保护手段,只授权访问过滤后的视图。
视图可查询,也可在视图上再定义视图;但不能在视图上定义新的基本表。并非所有视图都可更新,含聚合、分组、去重、多表复杂连接的视图通常不可更新。
八、索引
索引能提高查询效率,因为它为查找条件建立了有序或散列式的辅助访问路径,避免全表扫描。
但索引不是越多越好。插入、删除、更新时索引也要维护,会增加开销。
聚簇索引决定数据物理排列,一个基本表通常只能有一个聚簇索引。非聚簇索引可以有多个。
关系代数优化中应尽早做选择和投影;不是尽早做连接,更不是尽早做笛卡尔积。