《教妹学数据库系统》(五)逻辑数据库设计(下)

hello大家好,上次学习了逻辑数据库设计上半部分(点击复习ER模型转换为关系数据库模式与函数依赖),今天我们来学习下半部分:关系模式的范式与分解。教妹学数据库,没见过这么酷炫的标题吧?“语不惊人死不休”,没错,标题就是这么酷炫。

我的妹妹小埋18岁,校园中女神一般的存在,成绩优异体育万能,个性温柔正直善良。然而,只有我知道,众人眼中光芒万丈的小埋,在过去是一个披着仓鼠斗篷,满地打滚,除了吃就是睡和玩的超级宅女。而这一切的转变,是从那一天晚上开始的。

从此之后,小埋经常让我帮她辅导功课。上次她听了逻辑数据库设计的上半部分,这次便央求我讲下半部分。本篇教程通过我与小埋的对话的方式来谈一谈逻辑数据库设计。

博客还在持续更新中,想看同系列的其他博客。欢迎访问我的专栏《教妹学数据库系统》希望大家能够关注我,一起学数据库系统。

关系模式的范式

关系模式R(U)的函数依赖集F的最小覆盖(canonicalcover)是满足下列3个条件的F
的等价函数依赖集Fc

  1. (不存在冗余函数依赖) Fc中不存在函数依赖X→Y,使得Fc与Fc−{X→Y}等价

  2. (函数依赖左部不存在冗余属性) Fc中不存在函数依赖X→Y,有Z⊂X使得Fc与(Fc−{X→Y})∪{Z→Y}等价

  3. (函数依赖左部唯一) Fc中任意两个函数依赖的左部不相同
    在这里插入图片描述

第一范式(1NF)

如果关系模式R的每个属性都是不可分的,则称R为第一范式关系模式,记作R∈1NF
在这里插入图片描述

  • 问题1: 数据插入异常。现象:该插入的数据无法插入
  • 问题2: 数据删除异常。现象:不该删除的数据不得不删除
  • 问题3: 数据修改繁琐。现象:数据修改非常繁琐,容易出错
  • 问题4: 数据冗余。现象:存在大量冗余数据

主属性:候选键中的属性

存在问题

问题1(数据插入异常): 该插入的数据无法插入

问题2(数据删除异常): 不该删除的数据不得不删除

问题3(数据修改繁琐): 数据修改繁琐,容易出错

问题4(数据冗余): 存在大量冗余数据

解决方法

  1. 产生原因:非主属性Sdept和Sdean部分函数依赖于候选键(Sno,Cno)

  2. 解决方法:把SDC分解为下面两个关系模式:

  • SD(Sno,Sname,Sdept,Sdean)
  • SC(Sno,Cno,Grade)

第二范式(2NF)

  1. 如果关系模式R∈1NF,且R的每个非主属性都完全函数依赖于R的候选键,则称R为第二范式关系模式,记作R∈2NF。

在这里插入图片描述

存在问题

问题1(数据插入异常): 该插入的数据无法插入

问题2(数据删除异常): 不该删除的数据不得不删除

问题3(数据修改繁琐): 数据修改繁琐,容易出错

问题4(数据冗余): 存在大量冗余数据

解决方法

  1. 产生原因:非主属性Sdean传递函数依赖于候选键Sno

  2. 解决方法:把SD分解为下面两个关系模式:IS(Sno,Sname,Sdept)、ID(Sdept,Sdean)

第三范式(3NF)

如果关系模式R∈2NF,且R的每个非主属性都不传递函数依赖于R的候选键,则称R为第三范式关系模式,记作R∈3NF
在这里插入图片描述
在这里插入图片描述

存在问题

在STC(Sno, Tno, Cno)中没有非主属性(候选键(Sno, Tno)和(Sno, Cno))
在这里插入图片描述

在一个关系中,如果一个属性是构成某一个候选关键字(候选键)的属性集中的一个属性,则称它为主属性。

  • 问题1(数据插入异常): 该插入的数据无法插入
    在这里插入图片描述

  • 问题2(数据删除异常): 不该删除的数据不得不删除

  • 问题3(数据修改繁琐): 数据修改繁琐,容易出错

  • 问题4(数据冗余): 存在大量冗余数据

解决方法

  1. 产生原因: 主属性Cno部分函数依赖于候选键(Sno,Tno)

  2. 解决方法: 把STC分解为下面两个关系模式: TC(Tno,Cno)、ST(Sno,Tno)

Boyce-Codd范式(BCNF)

  1. 若关系模式R(U,F)∈1NF,且F的最小覆盖中每个函数依赖X→Y的左部X都是R的候选键,则称R为BC范式关系模式,记作R∈BCNF

  2. 若关系模式R(U,F)∈3NF,且R的任意主属性都直接完全函数依赖于R的候选键,则称R为BC范式关系模式,记作R∈BCNF
    在这里插入图片描述

范式之间的关系

在这里插入图片描述

关系模式分解

设R(U)是属性集U上的关系模式,ρ={R1(U1),R2(U2),…,Rn(Un)}是R的一个分解(decomposition),如果U=U1∪U2∪···∪Un,且对任意i不等于j,有Ui 不包含于 Uj(无冗余)
在这里插入图片描述

关系模式分解准则1: 无损连接性(LosslessJoin)

在这里插入图片描述
在这里插入图片描述

关系模式分解准则2: 函数依赖保持性

函数依赖集的投影

设R(U,F)是关系模式,U是属性集,F是函数依赖集。对于V⊆U,F在V上的投影是F+中满足X∪Y⊆V的函数依赖X→Y的集合。
在这里插入图片描述

保持函数依赖分解

设R(U,F)是一个关系模式,U是属性集,F是函数依赖集。设ρ={R1(U1),R2(U2),…,Rn(Un)}是对R的一个分解,Fi是F在Ui上的投影。如果F1∪F2∪···∪Fn覆盖F,则ρ是保持函数依赖的模式分解。
在这里插入图片描述

无损连接性的判定

  1. 目的:判定一个关系模式分解是否满足无损连接性

  2. 方法1:(一个关系模式被分解为两个关系模式时的判定方法)

  3. 定理:关系模式R(U,F)的分解ρ={R1(U1), R2(U2)}满足无损连接性的充要条件是F|=U1∩U2→U1或F|=U1∩U2→U2

函数依赖保持性的判定

  1. 目的: 判定一个关系模式分解是否满足函数依赖保持性

  2. 方法1: 根据函数依赖保持性的定义进行判断

  3. 方法2: 对于函数依赖集F中每个函数依赖X→Y,使用下面的算法判断是否F1∪F2∪···∪Fn|=X→Y

关系模式的分解方法

3NF关系模式分解算法

功能: 将关系模式R(U,F)分解为一组3NF关系模式,且该分解既保持函数依赖,又满足无损连接性
在这里插入图片描述

BCNF关系模式分解算法

功能:将关系模式R(U,F)分解为一组无损连接BCNF关系模式
在这里插入图片描述

总结

咱们玩归玩,闹归闹,别拿学习开玩笑。

关系范式中第一范式、第二范式、第三范式、BCNF范式是根据完全函数依赖和传递函数依赖层层递进的(如果不清楚函数依赖的关系,可以回过头来看上半部分)。

值得注意的是,规范是评价关系模式的标准之一。是否每个关系模式都有必要化成第三范式或BCNF范式,欢迎在留言交流!

发布了116 篇原创文章 · 获赞 1194 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/JAck_chen0309/article/details/105086044