目录
一、数据库模式
数据库有三级模式,两层映射。三级模式分别是外模式(也称子模式或用户模式)、概念模式(也称模式或逻辑模式)、内模式(也称物理模式或存储模式)。具体如下:
两个映射可以保证逻辑独立性和物理独立性,即使物理结构或逻辑结构发生变化,应用程序不需要改变,因为应用程序查出的数据是视图,只需要将映射关系调整即可。
注意:内模式就是查看存储文件,不是数据库表!三个模式对应的结构分别是:视图->基本表->存储文件。
二、数据库设计
数据设计包括:需求分析、概念设计、逻辑设计、物理设计这4个步骤。具体如下:
需求分析:需要确定系统边界、数据特征、数据量估计,输出物有:数据流图、数据字典、需求说明书。
概念设计:需要在需求说明书的基础上抽象出概念模型(ER模型)。
逻辑设计:将概念模型转化为某个特定的DBMS上的逻辑模型。
物理设计:对给定的逻辑模型选取合适的物理结构,即数据库在物理设备上的存储结构和存取方法。
三、ER模型
ER模型的实体关系主要有一对一、一对多、多对多关系。
ER模型主要是概念设计的产物,具体建模步骤如下:
基本上一个实体对应数据库的一张表,若要归并实体(表),则一对一和一对多的实体表是可以归并的,而多对多是无法归并的。
四、关系代数
关系主要有:并(∪)、交(∩)、差(-)、笛卡尔积(×)、投影(π)、选择、连接、除。
交:取两个集合相同的部分。
并:取都出现在两个集合的部分(去重)。
差:被减集合中去除另一集合相同部门后剩下的部分。
笛卡尔积:将后一个集合的所有数据循环拼接到前一个集合的每一行数据后面。
投影:相当于SQL中的selet列名,只打印出投影出的列。
选择:相当于SQL中的where条件,只打印出符合条件的行。
连接:将匹配上的记录拼接起来。其中自然连接则取相同列取值相等的元组匹配拼接。
除:结果集合除数做笛卡尔积的结果都应该在被除数中。
五、规范化理论
5.1 函数依赖
函数依赖有部分函数依赖和传递依赖。具体如下:
AB共同决定C,具体示例为:A为学号、B为课程、C为姓名。虽然A和B能决定C,但单独一个A也能决定C,这个是部分函数依赖。
A决定B,B决定C,推出A决定C。具体示例为:A为商品编号、B为商品型号,C为价格。
5.2 键
超键:唯一标识元组的键,可以是多个列(属性)组成,也可以有冗余列(属性)。
候选键:去除超键中的冗余属性局势候选键,能唯一标识元组的键。
主键:多个候选键中任选一个就是主键。
外键:其它关系的主键。
比如 学号、姓名、性别、身份证号、年龄。超键可以是(学号,姓名)、(身份证号,年龄)。候选键可以是:学号、身份证号。主键可以是身份证号。
5.3 价值与用途
非规范化的关系模式,可能存在问题有:数据冗余、更新异常、插入异常、删除异常。
比如上面这个表,数据冗余多,有DNO、DNAME、LOCATION有冗余,会有大量重复数据。
5.4 范式
码:能确定一行记录的一个或多个属性,也可以理解为超键,范式定义里通常情况下理解为候选码(候选键)。
主码:主键,候选码中选一个就是主码(主键)。
主属性:构成候选码的属性都叫主属性。
非主属性:除主属性之外的属性。
第一范式:属性值都是不可再分割原子值。比如高级职称人数属性,它还被分割成教授和副教授人数(比如数据库存值[8,9]分别表示教授和副教授人数为8和9),违背了第一范式。
第二范式:满足1NF(第一范式)后,每个非主属性完全依赖码(不存在部分依赖)。比如有(学号,课程号,成绩,学分)这4个字段组成的表,由于主键(码)是(学号,课程号),但课程号可以直接决定学分,存在部分依赖,违背了第二范式。
第三范式:满足2NF时,非键属性不传递依赖于候选键(码)。比如(学号,身份证号,姓名,部门号,部门名称,部门位置),其中学号和身份证号为候选键,学号为主键,虽然它们满足了1NF和2NF,但由于有【学号/身份证号->部门号->部门位置/部门名称,部门号≠>学号/身份证号】的传递依赖,因此违背了第三范式。
BC范式:满足1NF时,每个属性都不部分依赖于候选键也不传递依赖于候选键。比如(学号,身份证号,课程号,分数),其中候选码为(学号,课程号)或(身份证号,课程号),在这里主属性身份证号部分依赖于候选码(学号,课程号),违背了BC范式。
5.5 模式分解
为了解决关系模式的存储异常等问题,可以通过分解关系模式来解决问题,即将一个关系分解成几个子关系(一个大表分解成几个小表)。
若拆分出的子关系(小表)能通过连接投影等操作还原成大关系模式(大表),则为无损分解,若不能还原则为有损拆分。
比如:原关系模式为 成绩关系(学号,姓名,课程号,课程名,分数),有函数依赖:学号->姓名,课程号->课程名,(学号,课程号)->分数。
可以无损分解成:成绩(学号,课程号,分数),学生(学号,姓名),课程(课程号,课程名)。
因为学号->姓名。所以成绩表可以变成(学号,课程号,分数,姓名)。
因为课程号->课程名。所以成绩表可以变成(学号,课程号,分数,姓名,课程名),能还原成原关系模式。
六、并发控制
总体概念如下:
6.1 面临的问题
丢失更新:两个事务读取同一个数据,后更新的事务会将前提交事务的结果覆盖。导致最后的结果与预期运算的结果不一致。
不可重复读:多个事务都在读取或修改数据,一个事务读取到了另一个事务修改后的结果,导致事务两个读取相同的数据的值不一样。
读脏数据:一个事务读取到了另一事务回滚前的更新数据。
6.2 封锁协议
X锁:排他锁,也叫写锁,数据被加了X锁后,不能被加X锁和S锁,加了X锁或S锁的数据不能再被加X锁。
S锁:共享锁,也叫读锁,同一数据可被加多个S锁,但加了S锁的数据不能加X锁。
七、数据库安全
八、数据库备份
注意,差量备份是对完全备份的变动,增量是记录上次备份后的变动。比如一周七天备份策略是:完全(周日)、增量、增量、增量、差量(周四)、增量、增量(周六)。这样一旦周五数据有问题,需要恢复,则只需要 周日的完全备份+周四的差量备份+周五的增量备份 就可以恢复数据了,不需要每天的增量备份去运行。