auto commit
This commit is contained in:
parent
41b53a79f8
commit
8ee1f42525
104
notes/数据库系统原理.md
104
notes/数据库系统原理.md
|
@ -294,26 +294,30 @@ Entity-Relationship,有三个组成部分:实体、属性、联系。
|
|||
|
||||
## 异常
|
||||
|
||||
以下关系中,Sno 表示学号,Sname 表示学生姓名,Sdept 表示学院,Cname 表示课程名,Mname 表示院长姓名。函数依赖为 {Sno, Cname} -> {Sname, Sdept, Mname}。
|
||||
以下的学生课程关系的函数依赖为 Sno, Cname -> Sname, Sdept, Mname, Grade,键码为 {Sno, Cname}。也就是说,确定学生和课程之后,就能确定其它信息。
|
||||
|
||||
<div align="center"> <img src="../pics//0b304499-0d7c-49cc-b784-3e7a805c9fba.jpg"/> </div><br>
|
||||
| Sno | Sname | Sdept | Mname | Cname | Grade |
|
||||
| :---: | :---: | :---: | :---: | :---: |:---:|
|
||||
| 1 | 学生-1 | 学院-1 | 院长-1 | 课程-1 | 90 |
|
||||
| 2 | 学生-2 | 学院-2 | 院长-2 | 课程-2 | 80 |
|
||||
| 2 | 学生-2 | 学院-2 | 院长-2 | 课程-1 | 100 |
|
||||
|
||||
不符合范式的关系,会产生很多异常。主要有以下四种异常:
|
||||
不符合范式的关系,会产生很多异常,主要有以下四种异常:
|
||||
|
||||
1. 冗余数据
|
||||
2. 修改异常
|
||||
3. 删除异常
|
||||
4. 插入异常,比如如果新插入一个学生的信息,而这个学生还没选课,那么就无法插入该学生。
|
||||
1. 冗余数据。
|
||||
2. 修改异常,修改了一个记录中的信息,但是另一个记录中相同的信息却没有被修改。
|
||||
3. 删除异常,删除一个信息,那么也会丢失其它信息。例如如果删除了课程-1,因为学生和课程共同组成了键码,那么学生-1 数据也就不能存在,因此也需要删除。
|
||||
4. 插入异常,比如新插入一个学生的信息,而这个学生还没选课,那么就无法插入该学生。
|
||||
|
||||
## 范式
|
||||
|
||||
范式理论是为了解决以上提到四种异常。
|
||||
范式理论是为了解决以上提到四种异常。高级别范式的依赖于低级别的范式。
|
||||
|
||||
高级别范式的依赖基于低级别的范式。
|
||||
<div align="center"> <img src="../pics//c2d343f7-604c-4856-9a3c-c71d6f67fecc.png" width="300"/> </div><br>
|
||||
|
||||
### 1. 第一范式 (1NF)
|
||||
|
||||
属性不可分。
|
||||
属性不可分;
|
||||
|
||||
### 2. 第二范式 (2NF)
|
||||
|
||||
|
@ -323,57 +327,95 @@ Entity-Relationship,有三个组成部分:实体、属性、联系。
|
|||
|
||||
<font size=4> **分解前** </font><br>
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?S(Sno,Cname,Sname,Sdept,Mname)"/></div> <br>
|
||||
| Sno | Sname | Sdept | Mname | Cname | Grade |
|
||||
| :---: | :---: | :---: | :---: | :---: |:---:|
|
||||
| 1 | 学生-1 | 学院-1 | 院长-1 | 课程-1 | 90 |
|
||||
| 2 | 学生-2 | 学院-2 | 院长-2 | 课程-2 | 80 |
|
||||
| 2 | 学生-2 | 学院-2 | 院长-2 | 课程-1 | 100 |
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?Sno,Cname->Sname,Sdept,Mname"/></div> <br>
|
||||
以上学生课程关系中,{Sno, Cname} 为键码,有如下函数依赖:
|
||||
|
||||
- Sno, Cname -> Sname, Sdept, Mname
|
||||
- Son -> Sname, Sdept
|
||||
- Sdept -> Mname
|
||||
- Sno -> Manme
|
||||
- Sno, Cname-> Grade
|
||||
|
||||
Grade 完全函数依赖于键码,它没有任何冗余数据,每个学生的每门课都有特定的成绩。
|
||||
|
||||
Sname, Sdept 和 Manme 都函数依赖于 Sno,而部分依赖于键码。当一个学生选修了多门课时,这些数据就会出现多次,造成大量冗余数据。
|
||||
|
||||
<font size=4> **分解后** </font><br>
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?S1(Sno,Sname,Sdept,Mname)"/></div> <br>
|
||||
关系-1
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?Sno->Sname,Sdept,Mname"/></div> <br>
|
||||
| Sno | Sname | Sdept | Mname |
|
||||
| :---: | :---: | :---: | :---: |
|
||||
| 1 | 学生-1 | 学院-1 | 院长-1 |
|
||||
| 2 | 学生-2 | 学院-2 | 院长-2 |
|
||||
| 2 | 学生-2 | 学院-2 | 院长-2 |
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?Sdept->Mname"/></div> <br>
|
||||
有以下函数依赖:
|
||||
|
||||
<div align="center"> <img src="../pics//8ef22836-8800-4765-b4b8-ade80096b323.jpg"/> </div><br>
|
||||
- Sno -> Sname, Sdept, Mname
|
||||
- Sdept -> Mname
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?S2(Sno,Cname,Grade)"/></div> <br>
|
||||
关系-2
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?Sno,Cname->Grade"/></div> <br>
|
||||
| Sno | Cname | Grade |
|
||||
| :---: | :---: |:---:|
|
||||
| 1 | 课程-1 | 90 |
|
||||
| 2 | 课程-2 | 80 |
|
||||
| 2 | 课程-1 | 100 |
|
||||
|
||||
<div align="center"> <img src="../pics//b0748916-1acd-4138-b24c-69326cb452fe.jpg"/> </div><br>
|
||||
有以下函数依赖:
|
||||
|
||||
- Sno, Cname -> Grade
|
||||
|
||||
### 3. 第三范式 (3NF)
|
||||
|
||||
非主属性不传递依赖于键码。
|
||||
|
||||
上述 S1 存在传递依赖,Mname 依赖于 Sdept,而 Sdept 又依赖于 Sno,可以继续分解。
|
||||
上面的关系-1 中存在以下传递依赖:Sno -> Sdept -> Mname,可以进行以下分解:
|
||||
|
||||
<div align="center"> <img src="../pics//923896c1-937e-4a38-b8a6-cec3040b4e2a.jpg"/> </div><br>
|
||||
关系-11
|
||||
|
||||
| Sno | Sname | Sdept |
|
||||
| :---: | :---: | :---: |
|
||||
| 1 | 学生-1 | 学院-1 |
|
||||
| 2 | 学生-2 | 学院-2 |
|
||||
| 2 | 学生-2 | 学院-2 |
|
||||
|
||||
关系-12
|
||||
|
||||
| Sdept | Mname |
|
||||
| :---: | :---: |
|
||||
| 学院-1 | 院长-1 |
|
||||
| 学院-2 | 院长-2 |
|
||||
| 学院-2 | 院长-2 |
|
||||
|
||||
### 4. BC 范式(BCNF)
|
||||
|
||||
所有属性不传递依赖于键码。
|
||||
|
||||
关系模式 STC(Sname, Tname, Cname, Grade),其中四个属性分别为学生姓名、教师姓名、课程名和成绩。有以下函数依赖:
|
||||
关系 STC(Sname, Tname, Cname, Grade) 的四个属性分别为学生姓名、教师姓名、课程名和成绩,它的键码为 (Sname, Cname, Tname),有以下函数依赖:
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?Sname,Cname->Tname"/></div> <br>
|
||||
- Sname, Cname -> Tname
|
||||
- Sname, Cname -> Grade
|
||||
- Sname, Tname -> Cname
|
||||
- Sname, Tname -> Grade
|
||||
- Tname -> Cname
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?Sname,Cname->Grade"/></div> <br>
|
||||
存在着以下函数传递依赖:
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?Sname,Tname->Cname"/></div> <br>
|
||||
- Sname -> Tname -> Cname
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?Sname,Tname->Grade"/></div> <br>
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?Tname->Cname"/></div> <br>
|
||||
|
||||
分解成 SC(Sname, Cname, Grade) 和 ST(Sname, Tname),对于 ST,属性之间是多对多关系,无函数依赖。
|
||||
可以分解成 SC(Sname, Cname, Grade) 和 ST(Sname, Tname),对于 ST,属性之间是多对多关系,无函数依赖。
|
||||
|
||||
# 参考资料
|
||||
|
||||
- 史嘉权. 数据库系统概论[M]. 清华大学出版社有限公司, 2006.
|
||||
- 施瓦茨. 高性能MYSQL(第3版)[M]. 电子工业出版社, 2013.
|
||||
- [MySQL 乐观锁与悲观锁 ](https://www.jianshu.com/p/f5ff017db62a)
|
||||
- [Transaction isolation levels](https://www.slideshare.net/ErnestoHernandezRodriguez/transaction-isolation-levels)
|
||||
- [Concurrency Control](http://scanftree.com/dbms/2-phase-locking-protocol)
|
||||
- [The Nightmare of Locking, Blocking and Isolation Levels!](https://www.slideshare.net/brshristov/the-nightmare-of-locking-blocking-and-isolation-levels-46391666)
|
||||
|
|
BIN
pics/c2d343f7-604c-4856-9a3c-c71d6f67fecc.png
Normal file
BIN
pics/c2d343f7-604c-4856-9a3c-c71d6f67fecc.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
Loading…
Reference in New Issue
Block a user