本专栏收录了数据库的知识点,而从本文起,将讲述有关于关系数据理论中的第一范式、第二范式、第三范式以及BC范式有关知识点,提供给有需要的小伙伴进行学习,本专栏地址可以戳下面链接查看
🎈 数据库知识点总结(持续更新中):【数据库知识点】
🔑 数据库相关练习题(持续更新中):【数据库练习题】
🔥 一个提供给Java学习者的专栏:【拼图小游戏(Java)】
一、前言
在解决一个具体问题时,要构造一个属于该问题的数据模式,设计一个较好的关系模式,因而我们需要学习关系数据库
二、关系模式存在问题
数据冗余
更新异常
插入异常
删除异常
光讲述这四个问题可能大家没有什么概念,那么通过一个例子带大家浏览一下关系模式存在的问题
U = {Sno,Sdept,Mname,Cno,Grade}
Sno | Sdept | Mname | Cno | Grade |
---|---|---|---|---|
S1 | 计算机系 | 张教授 | C1 | 95 |
S1 | 计算机系 | 张教授 | C1 | 89 |
S2 | 计算机系 | 张教授 | C1 | 92 |
S3 | 计算机系 | 张教授 | C1 | 78 |
S3 | 计算机系 | 张教授 | C1 | 83 |
语义如下:
- 一个系有若干学生,但一个学生只属于一个系
- 一个系只有一个正职负责人
- 一个学生可以选多门课,每门课有若干学生选修
- 每个学生学习每门课有一个成绩
关系模式存在的问题
数据冗余
:系主任的名字重复出现更新异常
:由于数据冗余,所以一旦更换系主任后,就要修改与这个系有关的学生的每个元组插入异常
:如果有一个刚成立的系,但是没有学生,就没办法将系相关信息存入数据库删除异常
:如果某个系的学生都毕业了,那么在删除该系学生信息同时,该系及系主任发信息也就不存在了
三、函数依赖
1.引入
属性组U上的一组函数依赖F如下
F ={Sno→Sdept, Sdept→Mname, (Sno, Cno)→Grade}
2.定义
- 设R(U)是一个属性集U上的关系模式,
X和Y是U的子集
- 若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或
Y函数依赖于X
,记作x➡y X
称为决定因素
,Y
称为依赖因素
- 函数依赖是
语义范畴
的概念 - 只能
根据数据的语义
来确定函数依赖
3.平凡函数依赖与非平凡函数依赖
X→Y,Y⊈X
,则称X→Y是非平凡的函数依赖
X→Y,Y⊆X
,则称X→Y是平凡的函数依赖
- 若不特别声明,我们一般讨论非平凡函数依赖
例如:
在关系SC(Sno, Cno, Grade)中
非平凡函数依赖: (Sno, Cno) → Grade
平凡函数依赖: (Sno, Cno) → Sno,(Sno, Cno) → Cno
因为Sno包含于(Sno, Cno) 中,Cno包含于(Sno, Cno) 中
4.完全函数依赖和部分函数依赖
- Sno、Cno无法单独与Grade形成依赖关系,但是(Sno、Cno)与Grade可以形成函数依赖的关系,那么(Sno、Cno)与Grade存在 完全函数依赖(F) 关系
- Sno、Cno中的Sno可以单独与Sdept形成依赖关系,并且(Sno、Cno)与Grade不能形成函数依赖的关系,那么(Sno、Cno)与Grade存在 部分函数依赖(P) 关系
5.传递函数依赖