软考-中级数据库系统分析师-02 关系数据库
2023-05-06
关系数据库概述
相关名词
- 关系:实体以及实体间的联系
- 关系模式:关系的描述,类似于程序设计语言中类型定义的概念
- 关系模型:若干个关系模式组成的集合
- 属性
- 域:每个属性的取值范围所对应一个值的集合
- 候选码:或称为码。某个属性或一组属性可以唯一标识一个元组,一个关系可能有多个候选码
- 主码(主键):若有多个候选码,可选定一个为主码
- 主属性:包含在任何候选码(出现在一个候选码中即可)的各个属性
- 非主属性:不包含在任何候选码的属性
- 外码:非该关系的码,但是其他关系的码
- 全码:所有属性组是这个关系模式的候选码
- 元组/记录:某行
- 字段、数据项
- 元数:属性的个数(列数)
- 基数:记录的个数(行数)
- n元关系:元数为几,就是几元关系
关系模式
可以表示为:R(U,D,dom,F)
,一般简化为:R(U)
或R(A1,A2,...)
分类:
- 基本表:真实表
- 查询表:查询结果对应的表
- 视图表:虚拟的表
关系的完整性约束
用于保证用户对数据库修改时不会破坏数据的一致性
- 实体完整性:基本关系R的主属性不能取空值
- 参照完整性:例如学生的所属院系属性值必须在学院表的院系属性字段取值中
- 用户定义完整性:对于某一具体的关系数据库的约束条件,可用户指定
关系运算
- 基本关系代数运算
- 扩展运算
基本关系代数运算
- 并(要求两个关系必须有相同的关系模式,如相同的列数量和类型)
- 差(也是要求有相同的关系模式,属于R且不属于S)
- 广义笛卡尔积(不要求有相同的关系模式)
- 投影及广义投影(列选择)(不去重)
- 选择运算(选择满足条件的元组)(行选择)
扩展的关系运算
- 交(需要具有相同的关系模式)
- 连接(扩展的笛卡尔积,即笛卡尔积后进行条件筛选,包括西塔连接【大小于,不等于】、等值连接【等于】、自然连接【要求比较的字段必须是相同的属性组,并且所有相同的属性都得等值判断。并且去掉重复属性组。如果没有重复属性,则转换为普通的笛卡尔积】)
-
除(结果去重)
-
外连接(自然连接的扩展)(注意看图中的运算符号)
- 左外连接(左侧为准,右侧补充。不匹配的用NULL填充)
- 右外连接(与上面相反)
- 全外连接(左外+右外,取并集)
元组演算、域演算、查询优化
元组演算
域演算
查询优化
为查询选择最有效的查询计划的过程,节省时间和空间。在关系代数运算中,笛卡尔积、连接运算最耗费时间和空间。(笛卡尔积比连接运算代价更大,因为连接运算会只保留相同的列)
例如,连接前先把各自的表在横向和纵向上进行精简
关系数据库设计基础知识
函数依赖
如果两个相同的X,是否Y一定是相同的。满足则为X决定Y或Y函数依赖于X。
-
非平凡的函数依赖
-
平凡的函数依赖(一般不考虑)
-
完全函数依赖:X的任何一个真子集,都不能决定Y
-
部分(局部)函数依赖
-
传递函数依赖
码
- 候选码:可以决定全部属性,任何一个真子集都不能决定全部属性。
- 主码(主键):若有多个候选码,则可以选择一个作为主码。
- 包含在任何一个(即可)候选码的属性叫主属性,否则叫非主属性
- 外码(外键):非此表的码,是另一个表的码
多值依赖
规范化(重点)
1NF(第一范式)
定义:每一个分量是不可再分的数据项
存在的问题:
- 数据冗余
- 更新异常(修改操作后数据不一致)
- 插入异常
- 删除异常
2NF(第二范式)
定义:当1NF消除了非主属性对码的部分函数依赖
3NF(第三范式)
定义:当2NF消除了非主属性对码的传递函数依赖
BCNF(巴克斯范式)
定义:当3NF消除了主属性对码的部分函数依赖和传递函数依赖
性质:
- 所有非主属性对每个码都是完全函数依赖
- 所有主属性对每一个不包含它的码,也是完全函数依赖
- 没有任何属性完全函数依赖于非码的任何一组属性
4NF(第四范式)
定义:限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖
注意:如果只考虑函数依赖,则最高为BCNF范式。如果考虑多值依赖,则最高为4NF。只包含多值依赖关系的关系才可能是4NF,如果包含非多值依赖的属性,要拿出来才能组成4NF
5NF(一般不考)
Armstrong公理系统
函数依赖的闭包
- 函数依赖的闭包
- 属性的闭包
候选码求解
1、根据函数关系,将所有属性分类
- L 只在左边出现:一定是
- R 只在右边出现:一定不是
- LR 同时在左右出现:可能是,可能不是
- NLR 左右都没出现:一定是
2、将所有L和NLR组合起来,设为P,求P的闭包,若为全集U,则为候选码
3、若第2步闭包不是全集,则依次将LR类属性和P组合起来求闭包,只要其闭包为全集,则为候选码。注意:如果LR有多个,则要依次判断,因为可能有多个候选码
最小函数依赖集(极小函数依赖集/最小覆盖)
定义:
- 所有函数依赖的右侧只有一个属性
- 没有冗余的函数依赖
- 所有函数依赖的左侧没有冗余的属性
模式分解
无损连接
定义:一个关系模式分解为若干个关系模式后,通过自然连接和投影等运算仍能还原为原来的关系模式
保持函数依赖
补充知识
- 平凡和非平凡的函数依赖:X->Y,若Y是X的子集,则为平凡;否则为非平凡
- 平凡和非平凡的多值依赖:U=X+Y+Z,若X->->Y,且Z为空集,则为平凡;否则非平凡