zoukankan      html  css  js  c++  java
  • 数据依赖(决定),码,范式,规范化与反规范化

    思维导图

    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端数据到新产 生的联系表中。
  • 相关阅读:
    Firefly AIO-3399ProC开发板安装RKNN Toolkit 1.6.0开发环境
    用1kΩ电阻可以组合出多少个阻值?
    电气元件与电气控制的保护(PPT)
    MASM汇编DOS
    可免费解锁PDF的网站
    org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter和java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperL
    访问联合类型中某个类型特有的属性或方法
    防止攻击者篡改外部脚本
    对 state 中的数组使用 v-model
    TS 定义一个最简单的字符串数组类型
  • 原文地址:https://www.cnblogs.com/dongxuelove/p/14154759.html
Copyright © 2011-2022 走看看