数据依赖(决定),码,范式,规范化与反规范化

思维导图

image-20200618094335434

  • 下面K->U是完全函数依赖

image-20200701001722011

形式化定义

  • 设A是关系模式R的一个属性组(即一个或多个属性),如果对于R的任意的两个元组t和s:如果t[A]=s[A],那么t[R-A]=s[R-A],则称A为关系模式R的码,A的任意属性称为码的属性

函数依赖形式化定义

image-20200630235640050

非平凡函数依赖与平凡函数依赖

image-20200701000241176

完全函数依赖和部分函数依赖

image-20200701001227771

传递函数依赖

image-20200701001357116

关系模式中的函数依赖

  1. 假设有如下学生选课关系模式:R(学号,姓名,课程号,课程名,成绩,院系号,院系名), 其中(学号,课程号)为主码,则存在如下函数依赖:
    • (学号)→(姓名) 非平凡函数依赖
    • (学号,姓名)→(姓名) 平凡函数依赖
    • (学号,课程号)→(成绩) 完全函数依赖
    • (学号,课程号)→(课程名) 部分函数依赖,课程名只依赖于课程号
    • (学号)→(院系名) 传递函数依赖,(学号)→(院系号),(院系号)→(院系名)

函数依赖对关系模式的影响

  1. 假设有如下学生关系模式:R(学号,姓名,课程号,课程名,成绩),其中(学号,课程号 )为主码。(学号,课程号)→(成绩),(学号)→(姓名),(课程号)→(课程名)。这个关 系模式有部分函数依赖,存在4个问题:
    • 数据冗余太大: 每一个学生姓名重复出现,重复次数与该学生所选课程数相同;每一门课程 名重复出现,重复次数与选修该课程的学生数相同,这将消耗不必要的存储空间。
    • 更新异常: 学生修改姓名或课程修改课程名后,必须修改系统中所有选课有关的元组,如果 某一个元组没有被修改,将会导致数据不一致。
    • 插入异常: 如果新开一门课程,还没有学生选,就无法把这个课程的信息存入数据库。
    • 删除异常: 如果学生全部毕业了,在删除学生信息的同时,把课程信息也丢掉了。
  2. 解决方案:规范化,将上面的关系模式分解为R1(学号,姓名)、R2(课程号,课程名), R3(学号,课程号, 成绩)
  3. 结论:含有部分函数依赖,传递函数依赖的关系模式不是一个好 的关系模式。规范化理论正是用来改造关系模式,通过分解关系 模式来消除其中不合适的数据依赖,以解决插入异常、删除异常 、更新异常和数据冗余问题。

范式

思维导图

未命名文件 (1)

第一范式

image-20200701002210725

  • 关系模式R(学号,姓名,获奖),其中(学号)是主码,R不满足第一范式,因为 一个学生可能获得多个奖项。
  • 为了使R满足第一范式,有两种处理方式:
    • ①如果知道一个学生的获奖不超过3项,可以分解为R(学号,姓名,获奖1,获奖 2,获奖3)。这种处理方式使得R满足第一范式,但当大部分学生获奖较少时,数 据库中将产生大量的空值,同时可扩展性较差。
    • ②将R分解为R1(学号,姓名)和R2(学号,获奖)两个关系模式。R1中(学号 )作主码,R2中(学号)为外码,R2中(学号,获奖)作主码,这样避免了方式 ①的缺陷并使得R1和R2均满足第一范式。

第二范式

image-20200701002934840

  • 关系模式R(学号,课程号 ,姓名,课程名,成绩),R满足第一范 式,但不满足第二范式。因为(学号)→(姓名),(课程号)→( 课程名),(学号,课程号)→(成绩)。 •
  • 分解为三个关系模式:
    • R1(学号,姓名) (学号)为主码
    • R2(课程号,课程名) (课程号)为主码
    • R3(学号,课程号,成绩) (学号,课程号)

第三范式

image-20200701003215543

  • 关系模式R(学号,姓名,院系号,院系名),R满足第二范式,但不满 足第三范式,因为(学号)→(院系号),(院系号)→(院系名)。
  • 分解为两个关系模式:
    • R1(学号,姓名,院系号) (学号)为主码
    • R2(院系号,院系名) (院系号)为主码

BC范式

image-20200701003448865

image-20200701003418480

  • 设有一个仓库管理关系模式R(仓库号,物品号,管理员号,数量)。(仓库号,物品号)和(物品号,管理员号)均为候选码,上面关系是满 足第三范式的,但不满足BC范式,因为(管理员号)→(仓库号)。
  • 分解为两个关系模式:
    • R1(仓库号,物品号,数量) (仓库号,物品号)为主码
    • R2(仓库号,管理员号) (管理员号)为主码

规范化与反规范化

规范化的步骤

  • 对满足1NF的关系模式进行投影,消除原关系模式中非主属性对码 的部分函数依赖,将满足1NF的关系模式转换为若干个满足2NF的关 系模式。

  • 对满足2NF的关系模式进行投影,消除原关系模式中非主属性对码 的传递函数依赖,从而产生一组满足3NF的关系模式。

  • 对满足3NF的关系模式进行投影,消除原关系模式中主属性对码的 部分函数依赖和传递函数依赖,得到一组满足满足BCNF的关系模式

  • 对原关系进行投影,消除 决定属性不是侯选码的任何函数依赖

反规范化

  • 在关系型数据库中,反规范化是指在数据库规范化后,为了提高数据 检索性能,在某些局部降低规范化标准,引入适当的冗余的方法。
  • 反规范化数据库不应该和从未进行过规范化的数据库相混淆,反规范 化引入的冗余是一种受控的冗余。
  • 反规范化常用的方法是合并1:1联系的表,合并1:n联系的表,复制 1:n联系1端表中数据到n端,复制m:n联系中m端和n端数据到新产 生的联系表中。
原文地址:https://www.cnblogs.com/dongxuelove/p/14154759.html