【0409】规范化

    技术2022-07-21  82

    规范化

    规范化:生成一组既具有所期望的特性又能满足企业数据需求的关系的技术。

    不规范数据库带来的问题和解决办法

    数据冗余和更新异常

    存在冗余数据的关系可能存在一些问题——更新异常,更新异常又可分为插入异常、删除异常和修改异常

    插入异常

    需要重复填多次信息;插入新的信息后无法通过主键查找

    删除异常

    删除后可能丢失其他信息【删除公司最后一名员工后,分公司的信息丢失】

    修改异常

    必须更新所有信息【修改分公司的信息时,要修改该公司所有职员的信息】

    解决办法

    把表格分解,分解后的表格要存在联系。

    分解应该具有的两个重要特性:无损连接;保持函数依赖-------实体完整性?

    生成关系的特点:最少必要属性的个数;逻辑关系密切的属性在同一关系中

    函数依赖

    (一)确定函数依赖

    (1)1:1函数依赖-----非1对1 函数依赖

    根据一个属性的值可以确定另外的唯一的属性的值

    (2)永久函数依赖—非永久函数依赖

    函数依赖应对所有属性值都成立,一定能确定另一个属性的值

    (3)完全函数依赖—部分函数依赖

    只根据职员编号一定能查到分支机构编号;如果A,C都是主关键字,A->B 说明B部分依赖于A,C;A,C->B 说明B完全依赖于A,C

    (4)非平凡函数依赖------平凡函数依赖

    平凡函数依赖:A,B->A

    要关注的是非平凡函数依赖

    (5)传递函数依赖----非传递函数依赖

    A->B ,A->C,B->C 规范化要把传递函数依赖断掉

    (二)函数依赖的推导规则

    (1)自反性:若B是A的子类,A->B

    (2)增加性:A->B, A,C->B,C

    (3)传递性:A->B, B->C===>A->C

    (4)自确定性: A->A

    (5)可分解性:A->B,C===>A->B,A->C

    (6)合并性:A->B, A->C===>A->B,C

    (7)组合性:A->C, B->D===>A,B->C,D

    (8)伪传递性:A->B, B,C->D===>A,C->D

    (二)如何确定函数依赖

    第一步:给属性编号

    第二步骤:检查1能否决定2,决定3…检查2能否决定3,4…依次类推

    第三步骤:两列能否决定3,4…依次类推

    规范化技术

    至少规范到三范式3NF

    0.非规则表:包含一个或多个重复组的表

    1.第一范式1NF:行和列相交的部分有且仅有一个值

    消除重复组的常用的方法:

    (1)对表修平:在含有重复数据的行的空列中输入合适的数据

    (2)将重复数据单独移到一个新的关系中,同时也将原来关系中的关键属性复制到这个新的关系中。

    2.第二范式2NF:满足第一范式的要求并且每个非主关键字属性都完全函数依赖于主关键字的关系

    把部分依赖的部分拆除出去建立一个新的表

    3.第三范式3NF:满足第一范式和第二范式的要求并且所有非主关键字属性都不传递依赖于主关键字的关系

    把传递依赖的部分拆除出去建立一个新的表

    【方法二:一步到位。直接把部分依赖和传递依赖移出建立新的表,剩下的作为一张表,一步直接到3NF】

    4.BCNF鲍依斯-柯德范式:当且仅当每个函数依赖的决定方都是候选关键字时,某一关系才是BCNF的

    消除决定方不是候选关键字的依赖,每一个BCNF都是3NF,但是每一个3NF不一定是BCNF

    规范之后怎么确认函数依赖?

    根据题目给的假设或者自己设定的假设

    问题:

    1.怎么确定已经把所有假设设定完了?

    每个属性都涉及到

    Processed: 0.014, SQL: 9