数据分析->数据建模->关系数据库模式->关系数据库管理
用户需求->概念模型(E/R Model)->逻辑模型(三层结构)
现实世界->信息世界->机器世界
E-R图的组成元素:实体、属性、联系(而不是关系)
概念设计阶段常用的模型:实体联系模型(E-R模型--属于概念模型)
内容 | 图形 | 词属性 |
属性 | 椭圆形框 | 名词 |
实体 | 矩型框 | 名词 |
联系 | 菱形框 | 动词 |
实体标识符(主键),属性带下划线
外键标识为波浪线
联系的分类
一元联系 、二元联系、三元联系
1.首先设计局部ER模型
2.将各局部ER模型综合成一个全局ER模型
3.将全局ER模型进行优化,得到最终的ER模型(概念模型)
属性: 不可再分
实体和属性的关系只能是1:n
不同实体类型的属性之间应该无直接联系
每个实体都必须有至少一个实体标识符
步骤1(实体转换),将每个实体转换为一个关系模式(属性对应该关系模式的属性、实体标识符为关系模式的键)
步骤2(转换联系)
1:1联系:在任意一个实体中加入另一个实体的码和联系类型的属性(随便加)
1:n联系:在n段实体的关系模式加入1端实体的键和联系属性(多方加)
n:m联系:将联系也转换为关系模式,其属性为两端实体的键+联系类型(键为两端实体键的组合)
实例1
1.导出初始的关系模式集
2.规范化处理
逐一考察关系模式
判断它们是否满足规范要求
3.模式评价
4.模式修正
5.设计子模式
逻辑设计的工具--规范化理论
关系模式形式化
R(U,D,DOM,F)
R:关系名 U:属性名集合 D:所有来自的域 DOM:映象集合
F:依赖关系集合
常用: R(U) R(U,F)
数据依赖:定义属性值间的相互关联(主要体现在值的相等与否)
不合理依赖会造成:数据冗余太大、更新异常、插入异常、删除异常
解决方法:通过分解关系模式来消除不合适的数据依赖
依赖的表示: Sno->Sdept:Sno决定Sdept
(Sno,Cname)->Grade:Sno和Cname共同决定Grade
F={Sno->Sdept,Sdept->Mname,(Sno,Cname)->Grade}
X->Y:X函数确定Y,Y函数依赖于X,X是决定属性集
反过来不一定成立
平凡的函数依赖:X->Y,且Y属于X (Sno,Cno)->Sno
非平凡的函数依赖:X->Y,且Y不属于X (Sno,Cno)->Grade
完全函数依赖:X->Y,但X的任意子集不能决定Y 一一对应
部分函数依赖:X->Y但Y不完全依赖于X 多组属性共同决定
传递函数依赖:X->Y, Y->Z,且Y不属于X,Y不能决定X
码
候选码:在R(U,F)中存在一个属性K,若K完全决定U,则K为R的一个候选码
候选码可以唯一的标识一个元组
主码:若存在多个候选码则选定其中一个作为主码
主码和外码共同提供了表示关系连接的一种手段
符合某一种级别的关系模式的集合
范式的种类: 1NF,2NF,3NF,BCNF,4NF,5NF
1NF
关系模式中的属性不再可分
1NF是关系模式最基本的要求
2NF
每个非主属性都完全依赖于码
3NF
不存在非主属性对码的传递依赖
采用投影分解法
BCNF
BCNF是修正的3NF
若X->Y,且Y不属于X,则X中必定含有候选码(左边都包含候选码)
特性: 1.非主属性都完全依赖于候选码
2.主属性都完全依赖于不包含它的候选码
3.没有任何属性完全依赖与非码的任何一组属性
若R属于3NF,且R仅有一个候选码,则R必属于BCNF
若R属于BCNF,那么在函数依赖的范畴内已经实现了模式的彻底分解,达到了最高规格的规范化
如果分解后的关系可以通过自然连接恢复原来的关系,那么它便没有丢失数据
无损连接性:分解后的结果通过自然连接与原结果相等;只有具有无损连接性的分解才能保障不丢失信息。
无损连接性不一定能解决插入异常、删除异常、修改异常、数据冗余等问题,因为它在分解的时候会丢失原关系中的函数依赖
判断一个关系模式的分解: 1.有无损连接性->不丢失信息
2.保持函数依赖->减轻/解决异常情况