一、数据库设计合理性验证
ER图(数据库概念模型)->关系模式(数据库逻辑模型)
得到关系模式后采用范式来验证合理性
数据的抽象是模式(schema),表的定义是表的模式(schema)。数据库模式是所有表模式的集合。
数据的抽象(结构)是模式,模式的抽象(结构)是数据模型(关系数据模型)。
表table就是关系relation。relation schema关系模式就是表的定义
1.函数依赖
函数依赖可以用来确定一个关系的候选键
只关心有实际含义,精简的函数依赖
完全/部分函数依赖:去除左边一个属性后不成立,则为完全依赖,否则部份依赖
函数依赖推导
Armstrong公里公理
需要解决的一些问题类型
属性集X的闭包XF+
X在F中能利用公理推出来的所有属性的集合
eg格式
应用1.X->Y是否成立?
只要Y属于X+即可
应用2.求函数依赖集F的闭包F+(所有能推出来的函数依赖的集合)
应用3:判断属性集Xk是否为R的候选键
候选键具有最小性,注意从函数依赖的定义回到关系模式中
Xk->A成立,说明是超键。这个属性集能唯一决定整个元组
例题:
应用4:两个函数依赖集F和E是否等价
如果E中每个函数依赖都属于F+,那么F覆盖E
E中的每个函数依赖X-》Y,每个X通过F的依赖集,能够推出Y(Y∈XF+)
应用5:函数依赖集的最小集
一个是不需要X就能推出A,另一个是只需要部分X就能推出A
只能去除、替换因子是多个的依赖。又出现在右端,又出现在左端,就要注意
因子是多个的依赖,如果因子是别的依赖的右边,那么就要注意咯。用想删或者替换的左边闭包验证能不能修改该依赖。
例题:
瞪眼法,求闭包,假设去除替换A,看看能不能F‘推导出A
2.范式
检查是否存在潜在的冗余和更新异常
后面范式是在前面范式基础上,进一步增加约束条件。
第一范式1NF
authors和keywords两个多值属性在一起就不可以。
第二范式2NF
去除局部依赖的多余属性,并组成一个关系。再将其他的非主键属性并上主键
关键还是消除局部依赖即可,自己看着分把.....
在判断是否满足NF时,不仅仅只看基本的最简函数依赖,一个关系中有太多太多的依赖了,只要有一个不满足,那就得分解
第三范式3NF
BCNF
所有因子都是候选键
保持依赖分解成3NF:
F是最小覆盖
把R中不出现在F中的属性去掉,并单独组成一个模式
对X->A中 XA1A2组成一个模式
定理:如果X是候选键,分解中包含候选键X,则保持依赖和无损链接
无损检验chase算法:
有一行全a,则为无损链接
BCNF的分解:?
第二章 数据库建模设计
crow’s foot方法
第三章 概念模型转换逻辑模型
实体集先转化成table,主键保持不变
接下来再通过完善联系来完善table。
对每个联系:
1.一对多:不用开一张新表。一很少(轻量)(多的依赖(引用)少的),所以直接让多的通过一的外键引用一即可
2.多对多:需要开一张新表来描述联系。新表的属性是联系集本身的属性+参与联系的主键,并且主键是外键,新表的主键由参与联系的主键(外键)构成
3.一对一:不开新表。参考一对多,找到谁是依赖谁是被依赖。依赖的表需要加上被依赖的主键作为外键
4.继承:参照前面的转换规则。子实体集转换成一张表,属性需要加上父实体集的主键作为外键,并作为主键。