6.1问题的提出
6.1.1数据依赖
数据依赖是一个关系内部属性与属性之间的约束关系。这种约束关系是通过属性间值的相等与否体现出来的数据间的相关联系。数据依赖最重要的是函数依赖和多值依赖。
由函数依赖引发的异常:
(1)数据冗余
(2)更新异常
由于数据冗余,当更新数据库的数据时,系统要付出很大的代价来维护数据库的完整性。
(3)插入异常
当数据插入时要求我们掌握多个实体的信息,但是由于将所需的实体信息全部掌握而导致插入异常;或是当一个新实体出现了,但是由于不存在其他实体与之产生关系,这个新实体就不能被记录下来。
(4)删除异常
被迫删除不想删除的信息,尤其是当这个信息唯一的时候,就彻底删除了该信息。
6.2规范化
6.2.1第一范式
满足第一范式的条件:每一个分量必须是不可分的数据项
6.2.2第二范式
满足第二范式的条件:在满足第一范式的条件下,所有的非码都由整个主码决定。这也就是说如果主码是单个属性,那么必然满足第二范式;如果主码是复合主码,那么该主码的任意一个主属性不能决定其他任意一个非码。
6.2.3第三范式
满足第三范式的条件:在满足第二范式的条件下,非码之间不存在函数依赖。
6.2.4BC范式
满足BC范式的条件:在满足第三范式的条件下,所有的决定因素都是候选码。这就意味着所有的决定因素本身是能够唯一识别其他属性的,不能重复。
实现BC范式的过程
复习思路:熟练掌握例题
6.2.5规范化的优缺点
优点:规范化消除了更改的异常并减少了数据冗余,也因此根除了数据不一致引起的数据完整性问题,也节省了空间。
不能根除数据冗余问题,因为外码的存在。而外码作为数据冗余的情况并不会导致不一致的情况。因此不能根除冗余问题但是可以根除不一致的问题。
缺点:规范化需要书写更为复杂的SQL,规范化将一个表分成了多个表,在恢复数据时需要书写子查询或连接查询,处理更多的表也增加了耗费。
并不是所有情况都需要将其转换成BC范式,如果数据不会更新或是不一致问题可以通过正常操作来修正,那么就可以选择不进行BC范式的规范化。
多值依赖:多值依赖的问题必须被根除,一旦存在多值依赖的情况,就吧这个依赖的列单独放到一个另外的表中去。
只读数据库:由于数据库只能读不能写,也就不存在更待的异常,因此仅剩数据冗余的问题。数据冗余的问题是小问题。
去规范化: