《数据库系统概论》6.0——关系数据理论 大学生笔记

1.思维导图

2.问题提出

(1) 数据库规范化理论发展

  • 针对一个具体问题,应如何构建一个适合的数据库模式。
  • 这是数据库设计问题,也是关系数据库逻辑设计问题。
  • 人们通常以关系模型为背景来讨论问题,形成了——关系数据库的规范化理论。

下面我们回顾一下 关系模型.

(2)概念回顾

  • 关系:可简单的理解为二维表。
  • 关系模式:即二维表的逻辑结构。
  • 关系数据库:指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。
  • 关系数据库的模式:即关系数据库的逻辑结构。

(3)关系模型的形式化定义

三元组 R(U,F)

R:是符号化的元组语义。
U:为一组属性。
F:为属性U上的一组数据依赖。

(4)数据依赖

定义

 数据依赖是一个关系内部属性与属性之间的一种约束关系。

分类

  • 函数依赖

函数依赖极为普遍地存在于现实生活中。
比如描述一个学生,可以用学号(Sno)、姓名(Sname)、 系名(Sdept) 等几个属性。
由于一个学号只对应一个学生,一个学生只在一一个系学习。因而当“学号”值确定之后,学生的姓名及所在系的值也就被唯一地确定了。
属性间的这种依赖关系类似于数学中的函数y=f(x),自变量x确定之后,相应的函数值y也就唯一地确定 了。

  • 多值依赖

有这样一个关系 (仓库管理员,仓库号,库存产品号) , 假设一个产品只能放到一个仓库中,但是一个仓库可以有若干管理员,那么对应于一个 (仓库管理员,库存产品号)有一个仓库号,而实际上,这个仓库号只与库存产品号有关,与管理员无关,就说这是多值依赖

(5)数据依赖F对关系模式的影响

  • 因为关系数据库规范化理论主要研究的是三元组R(U,F),U我们都好理解,最重要的是F,这里我们简单的了解一下F对关系模式,即表的逻辑结构的影响,让我们理性的认识为什么学习关系数据库规范化理论.

举个例子:

首先 建立一个描述学校教务的数据库,数据库涉及的对象有:
学生的学号(Sno)、所在系(Sdept)、系主任姓名(Mname)、课程名(Cname)、成绩(G)

关系模式的属性集合

U={Sno,Sdept,Mname,Cno,G}

现实世界告诉我们,已知事实(语义)告诉我们:

①一个系有若干学生,但一个学生只属于一个系。
②一个系只有一名(正职)负责人。
③一个学生可以选修多门课程,每门课程有若干学生选修。
④每个学生学习每一门课程有一个成绩。

于是得性组U上的一组函数依赖F(如图6.1所示)
在这里插入图片描述
如果只考虑函数依赖这一种数据依赖, 可以得到一个描述学生的关系模式Student <U,F>。表6.1是某一时刻关系模式Student的一个实例,即数据表。

这个关系模式存在以下问题:

(1)数据冗余(Data redundancy)

比如,每一个系的系主任姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同, 这将浪费大量的存储空间。

(2)更新异常(update anomalies)

由于数据冗余,当更新数据库中的数据时,系统要付出很大的代价来维护数据库的完整性,否则会面临数据不一致的危险。比如,某系更换系主任后,必须修改与该系学生有关的每一个元组。

(3)插入异常(insertion anomalies)

如果一个系刚成立,尚无学生,则无法把这个系及其系主任的信息存入数据库。

(4)删除异常(deletion anomalies)

如果某个系的学生全部毕业了,则在删除该系学生信息的同时,这个系及其系主任的信息也丢掉了。

鉴于存在以上种种问题,可以得出这样的结论:

  • Student关系模式不是一个好的模式。
  • 好模式标准
    1. 不会发生插入异常。
    2. 不会发生删除异常和更新异常。
    3. 数据冗余应尽可能少。

一个模式的数据的依赖有那些不好的性质,如何改造不好的模式,这就是下面所讨论的话题了。

3.规范化

(1)函数依赖

设R(u)是属性集u上的关系模式,x,y是u的子集。若对于R(u)的任意一个可能关系r,r 中不能存在x上属性相同,而在y上属性不同。则称y函数依赖与x,记作x→y.

(2)函数依赖举例

例如:设一个职工关系为(职工号,姓名,性别,年龄,职务)
职工号用来标识每个职工,选作为该关系的主码。
对于该关系中每个职工的职工号,都对应着姓名属性中的唯一值,即该职工的姓名。
或者说一个职工的姓名由其职工号唯一确定,所以称职工号函数决定姓名,或称姓名函数依赖于 职工号,记作“职工号→姓名”。

4.码

(1)定义

  • 码是关系模式中的一个重要概念。在 码的定义中有关码的若干定义, 这里用函数依赖的概念来定义码。
  • 码唯一决定一个实体集。

(2) 候选码 超码 主码

在这里插入图片描述
说直白点:

  • 候选码 就是k属与于u上的属性。并且U对K完全依赖。
  • 超码 就是U对K 部分依赖。
  • 主码 就是候选码太多,要选一个是主要的。

5.范式(重要)

(1)定义

  • 关系数据库中,关系要满足一定要求。
  • 满足不同程度要求的为不同范式。

在这里插入图片描述

(2)1NF

1NF的定义:

  • 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
  • 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库
  • 但是满足第一范式的关系模式并不一定是一个好的关系模式

以下是一个满足1NF,但不是好的关系模式的例子:

关系模式 S-L-C(Sno, Sdept, Sloc, Cno, Grade) Sloc为学生住处,
假设每个系的学生住在同一个地方

这个例子中存在函数依赖,不是一个好的关系模式

图形化表示:
在这里插入图片描述

 S-L-C不是一个好的关系模式,一个关系模式 R不属于2NF,就会产生以下几个问题:

(1)插入异常。假若要插入一个学生Sno=S7, Sdept =PHY, Sloc =BLD2, 但该生还未选课,即这个学生无Cno,这样的元组就插不进S-L-C中。因为插入元组时必须给定码值,而这时码值的一部分
为空,因而学生的固有信息无法插入。
(2)删除异常。假定某个学生只选一门课,如S4就选了一门课C3,现在C3这门课他也不选了,那么C3这个数据项就要删除。而C3是主属性,删除了C3,整个元组就必须一起删除,使得S4的其他信息也被删除了,从而造成删除异常,即不应删除的信息也删除了。
(3)修改复杂。某个学生从数学系(MA)转到计算机科学系(CS),这本来只需修改此学生元组中的Sdept分量即可,但因为关系模式S-L-C中还含有系的住处Sloc属性,学生转系将同时改变住处,因而还必须修改元组中的Sloc分量。另外,如果这个学生选修了k门课,Sdept、
Sloc重复存储了k次,不仅存储冗余度大,而且必须无遗漏地修改k个元组中全部Sdept、Sloc 信息,造成修改的复杂化。

为什么会有这些问题呢?

原因:
Sdept、 Sloc部分函数依赖于码。
解决方法(也就是2NF的处理方法)
S-L-C分解为两个关系模式,以消除这些部分函数依赖
SC(Sno, Cno, Grade)
S-L(Sno, Sdept, Sloc)

2NF

  • 采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。所以又引入了3NF。

3NF

这里我们对上面的2NF例子再次进行剖析:

解决方法:

采用投影分解法,把S-L分解为两个关系模式,以消除传递函数依赖: S-D(Sno, Sdept) D-L(Sdept,Sloc)
S-D的码为Sno, D-L的码为Sdept。 分解后的关系模式S-D与D-L中不再存在传递依赖

采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。

BCNF

BCNF ( Boyce Codd Normal Form)是由Boyce与Codd提出的,比上述的3NF又进了一步,通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值