关系数据库理论

函数依赖:

关系数据库的规范化理论是数据库逻辑设计的工具。
关系模式由五部分组成,是一个五元组: R(U, D, DOM, F)
 关系名 R 是符号化的元组语义
U 为一组属性
D 为属性组 U 中的属性所来自的域
DOM 为属性到域的映射
F 为属性组 U 上的一组数据依赖
当且仅当 U 上的一个关系 r 满足 F 时, r 称为关系模式 R<U,F>
的一个关系。
作为二维表,关系要符合一个最基本的条件:每个分量必须
是不可分开的数据项。满足了这个条件的关系模式就属于第
一范式( 1NF )。
数据依赖的类型包括:多值依赖(MVD(Multi-Valued Dependency))和函数依赖(FD(Functional Dependency))。
函数依赖的实例:描述一个学生关系,可以有学号,姓名,系名等属性。
一个学号对应一个学生,一个学生只在一个系中学习。
学号确定后,学生的姓名和所在的系被唯一的确定。
Sname=f(Sno)Sdept=f(Sno)
Sno 函数决定 Sname
Sno 函数决定 Sdept
记作 Sno→SnameSno→Sdept

根据现实世界的已知事实:
一个系有若干学生, 但一个学生只属于一个系;
一个系只有一名(正职)负责人;
一个学生可以选修多门课程,每门课程有若干学生选修;
每个学生学习每一门课程有一个成绩。
我们可以得到在属性组U上的一组函数依赖F:
F={ Sno→Sdept, Sdept→ Mname, Sno, Cno)→ Grade }
也就是:

看一下我们实例化后的表格:

但是这个学生关系存在以下问题:
1,数据冗余高,系名,系主任名重复出现。
2,更新异常,更新数据付出代价比较大,更换系主任后,所有条目都要更新。
3,插入异常,一个元组在主键的属性上存在空时,该元组无法插入。(一个系刚成立,还没有学生,无法插入)。
4,删除异常,删除了不应被删除的数据(学生全部离去,系主任信息也会被删除)。
显然,这不是我们追求的高效的模式,高效的模式要保证插入,删除,更新正常,而且数据冗余要尽可能少。
我们可以通过分解数据模式来消除其中不合适的数据依赖。
试想:

我们先来解释一下概念:
函数依赖 functional dependency, abbr. FD
设: R A1 A2 ...An)=R( U )
X Y U 的不同子集
r R 的任一具体关系
s,t r 的任意两个元组
函数依赖 是完整性约束的一种,它推广了关键字
的概念。 If s[X]=t[X], then s[Y]=t[Y]
函数依赖 :若 R 的任意关系有:对 X 中的每个属性值,
Y 中都有惟一的值与之对应,则称 Y 函数依赖于 X
记作 X -> Y
函数依赖指的是关系模式R的所有实例都要满足约束条件。
给出例子会方便理解:

这里是函数依赖的有:AB->C,C->A。
为什么A->C,AB->D不是呢?
显然,C不依赖与A,D也不依赖于AB。
对于a1,有c1,c2与之对应,对于a1b1,有d1,d2与之对应,不存在依赖关系。
PPT看到第20页,明天继续,任务:更新关系数据库理论和操作系统,现在先去跑步。

相关推荐
辰哥单片机设计7 分钟前
JW01三合一传感器详解(STM32)
数据库·mongodb
小刘同学++9 分钟前
Qt使用 SQLite 数据库的基本方法
数据库·qt·sqlite
施嘉伟3 小时前
Oracle 11g RAC ASM磁盘组剔盘、加盘实施过程
数据库·oracle
橘猫云计算机设计4 小时前
springboot基于hadoop的酷狗音乐爬虫大数据分析可视化系统(源码+lw+部署文档+讲解),源码可白嫖!
数据库·hadoop·spring boot·爬虫·python·数据分析·毕业设计
卓怡学长4 小时前
w304基于HTML5的民谣网站的设计与实现
java·前端·数据库·spring boot·spring·html5
冰^5 小时前
MySQL VS SQL Server:优缺点全解析
数据库·数据仓库·redis·sql·mysql·json·数据库开发
电商数据girl5 小时前
产品经理对于电商接口的梳理||电商接口文档梳理与接入
大数据·数据库·python·自动化·产品经理
Spring小子6 小时前
黑马点评商户查询缓存--缓存更新策略
java·数据库·redis·后端
溜溜刘@♞7 小时前
数据库之mysql优化
数据库·mysql
uwvwko8 小时前
ctfhow——web入门214~218(时间盲注开始)
前端·数据库·mysql·ctf