本文基于软考高级系统架构师的相关书籍和视频,记录学习过程中的知识点。后续可能还会继续更新后面章节的知识点,感兴趣的可以点个收藏和关注
如有错误,还请评论区指点。
模式和映像
三级模式:
- 外模式(视图)
- 概念模式(基本表)
- 内模式(存储文件)
两级映像:
- 概念模式/内模式映像:实现概念模式和内模式之间的相互转换
- 外模式/概念模式映像:实现外模式和概念模式之间的相互转换
数据的物理独立性:内模式和概念模式
数据的逻辑独立性:外模式和概念模式
完整性规则
实体完整性:基本关系中的主属性不能为空
参照完整性:外码的值必须为空胡总和在被引用的表中必须存在
用户定义完整性:某一具体表的约束条件,例如 A 表的某字段不允许为空
关系运算符
选择(Selection)
选择是单目运算,其运算对象是一个表。该运算按给定的条件,从表中选出满足条件的行形成一个新表作为运算结果。
选择运算的记号为 σF(R)。
其中 σ 是选择运算符,下标 F 是一个条件表达式,R是被操作的表。
投影(Projection)
投影也是单目运算,该运算从表中选出指定的属性值组成一个新表,记为:πA(R)。
其中 A 是属性名(即列名)表,R 是表名。
除运算
R(A,B,C,D) ÷ S(C,D)
第一步得到R(A,B,C,D)中的{A,B}的全部组合
第二部判断{A,B}的组合能否满足S(C,D)的所有项,能的话就是结果集中的一行
笛卡尔积和自然连接
笛卡尔积: 即将一个表中的每一行与另一个表中的所有行进行组合,从而产生一张新的表格。
自然连接: 跟笛卡尔积的区别就是会去掉重复列
如果是笛卡尔积直接编号即可,如果是自然连接就需要去掉重复列
判断候选码
- 从来没有在右边出现过的属性必然是候选码之一
- 以该属性为基础依次扩展,看能否遍历出来所有属性,不能遍历到的也加入候选码中
函数依赖
函数依赖的公理系统中通常包含以下推理规则:
- 自反性(Reflexivity):对于任何关系 R 和属性集合 X,X 的子集总是能够决定 X 本身,即如果 Y 是 X 的子集,则 X→Y。
- 增广律(Augmentation):对于任何关系 R 和属性集合 X、Y,如果 X→Y,则对于任何 Z 的子集,都有 XZ→YZ。
- 传递性(Transitivity):对于任何关系 R 和属性集合 X、Y、Z,如果 X→Y,且 Y→Z,则 X→Z。
- 合成律(Composition):对于任何关系 R 和属性集合 X、Y、Z,如果 X→Y,且 Y→Z,则 XZ→YZ。
- 分解律(Decomposition):对于任何关系 R 和属性集合 X、Y、Z,如果 X→YZ,则 X→Y 且 X→Z。
- 伴随律(Union):对于任何关系 R 和属性集合 X、Y、Z,如果 X→Y,且 XZ→W,则 XZ→YW。
判断部分函数依赖技巧
第一步:先得到候选码
第二步:看是否存在非主属性依赖于候选码
判断是否保持函数依赖
简单办法:
如果 F 上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的 (这是充分条件) ,也就是看函数依赖的左右两边属性是否都在同一个分解模式中。
详细办法:
对于关系模式R(U,F),U 是属性集,F 是函数依赖设P = {R1(U1,F1) , R2(U2,F2) , ... , Rn(Un,Fn)}是R的一个分解,若F+=(UFi)+ ,则称分解P是保持函数依赖。
例:R ={A,B,C,D,E},F = {B → A,D → A ,A → E,AC → B},判断分解P ={R1(ABCE) , R2(CD)}是否保持函数依赖
首先,我们需要将R1和R2的函数依赖F1,F2找到。 显然有 F1 = {B → A ,A → E , AC → B} ,F2 = { }
注:这样就找全了吗?其实不然,在这一步中最容易漏掉部分函数依赖,比如传递依赖等关系会因为F的分组而丢失。
因此,我们需要计算一下左边属性的闭包( 函数依赖的闭包是指在给定的函数依赖集合下,可以通过推导得到的所有函数依赖关系 )
关系分解
当对关系模式R 进行分解时 ,R 的元组将分别在相应属性集进行投影而产生新的关系。如果对新的关系进行自然连接得到的元组的集合与原关系完全一致,则称为无损连接。
根据以下定理判断是否为无损联接
设 p={R1,R2} 是 R 的一个分解,F 是 R 上的函数依赖集,那么分解 p 相对于 F 是无损联接分解的充要条件是 (R1∩R2)→(R1-R2) 或 (R1∩R2)→(R2-R1)。
∩ 表示交集
R1-R2 就是把 R1 里面在 R2 里面有的属性删掉
三个及以上关系模式通过表格法求解,将所有属性排成列,然后按分解排成每一行,根据依赖关系打✓,如果有一行全是✓就说明是无损连接
例题
例题:假设关系模式R(U,F),属性集U={A,B,C},函数依赖集F={A→B,B→C}。若将其分解为p={R1(U1,F1),R2(U2,F2)},其中U1={A,B},U2={A,C}。
关系模式R(U,F)的一个分解p={R1(U1,F1),R2(U2,F2)} 具有无损连接的充分必要的条件是:
- U1∩U2→U1-U2∈F+
- U1∩U2→U2-U1∈F+
分解 p 是否无损连接分析如下:
- ∵ AB∩AC=A,AB-AC=B,AC-AB=C
- ∴ A→B∈F+,A→C∈F+
范式
作为数据库模式,通常至少要满足第三范式。
1NF
1NF 指的是数据库表中的任何属性都是原子性的,不可再分。
四个问题
- 冗余
- 修改操作不一致
- 插入异常
- 删除异常
2NF
2NF 解决了部分函数依赖,需要确保数据库表中的每一列都和主键相关, 而不能只与主键的某一部分相关(主要针对联合主键而言) 。
两个问题
- 冗余
- 插入/删除异常
判断技巧:
- 候选码为单属性的起码满足2NF
- 对于复合主键的关系,如果有非主键属性只依赖于部分主键,那么就不符合第二范式。
3NF
3NF 解决了传递依赖, 需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
- 传递依赖(至少 3 个属性才可能传递)
- 无非主属性起码满足 3NF
判断技巧:如果有非主键属性依赖于其他非主键属性,就不符合第三范式。
第四范式(4NF)
消除关系模式中的多值依赖,从而减少数据冗余和提高数据的一致性。以下是对第四范式的详细解释:
第四范式是在第三范式(3NF)的基础上进一步发展而来的。在3NF中,我们
消除了非主属性对主键的传递依赖和部分依赖,但在某些情况下,仍然可能存在多值依赖,即一个属性的值依赖于多个其他属性的值,而不是仅仅依赖于主键。
事务管理
原子性:用影子拷贝(浅拷贝) 实现
一致性:用完整性约束检查实现
隔离性
持续性
并发控制
共享锁
排他锁
读数据之前加读锁,如果需要写就加写锁,等事务结束后在释放锁
数据库设计
需求分析阶段
需求说明文档、数据字典、数据流图
概念结构设计
实体关系图 ER 图
ER 图集成时产生的冲突
- 属性冲突:包括属性域和属性取值的冲突。
- 命名冲突:包括同名异义和异名同义。
- 结构冲突:包括同一对象在不同应用中具有不同的抽象,以及统一实体在不同的局部 ER 图中所包含的属性个数和属性排列次序不完全相同。
数据模型
- 三要素:数据结构,数据操作,数据的约束条件
- 基本数据模型包括层次模型、网状模型、关系模型、面向对象模型
逻辑结构设计
物理结构设计
实施阶段
运行和维护阶段
分布式数据库
补充:
- 位置透明性需要了解分片情况
- 逻辑透明性需要了解分片和存储位置
数据库优化技术
集中式数据库优化技术
集中式数据库是相对于分布式数据库而言的概念
- 增加冗余列
- 增加派生列
- 重新组表
- 水平分割表
- 垂直分割表
分布式数据库优化技术
- 主从复制
- 读写分离
- 分表分库