SQL范式
来源:互联网 发布:婚礼布置设计软件 编辑:程序博客网 时间:2024/05/21 12:43
- 范式(Normal Form)
范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同的范式。
定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则称关系R为第一范式的关系模式(First Normal Form),简称关系R属于一范式,记为:R∈1NF。
- 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。(由关系属性的原子性得出)。
- 但是满足第一范式的关系模式并不一定是一个好的关系模式。
定义:若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF。即不存在部分依赖
SLC(Sno, Sdept, Sloc, Cno, Grade)
① 每个属性都是由不可再分的值构成,故SLC∈1NF
② 候选码:(Sno, Cno)
非主属性: Sdept, Sloc, Grade
Sno→Sdept,故(Sno, Cno) P Sdept,SLC∈2NF
不属于2NF的关系模式存在的问题:
(1) 插入异常
假设Sno='95102',Sdept='IS',Sloc='N'的学生还未选课(Cno为空值),因课程号是主属性,故不满足实体完整性约束,因此该学生的信息无法插入SLC。
(2) 删除异常
假定某个学生本来只选修了c3号这一门课程。现在因身体不适,他连c3号课程也不选修了。因课程号是主属性,此操作将导致该学生信息的整个元组都要删除。
不属于2NF的关系模式存在的问题:
(3) 数据冗余度大
如果一个学生选修了10门课程,那么他的Sdept和Sloc值就要重复存储了10次。
(4) 修改复杂
例如学生转系,在修改此学生元组的Sdept值的同时,还可能需要修改住处(Sloc)。如果这个学生选修了K门课,则必须无遗漏地修改K个元组中全部Sdept、Sloc信息。
- 原因:Sdept、Sloc部分函数依赖于码。
- 解决方法:SLC分解为两个关系模式,以消除这些部分函数依赖
SC(Sno, Cno, Grade)∈2NF
SL(Sno, Sdept, Sloc)∈2NF
定义: 关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性 Z (Z ? Y ), 使得 X→Y, Y → X ,Y→Z,成立,则称R∈3NF。
说明:①对Y未作任何限制。
②若 Z ? Y,则必有 Y→Z。由于 X 是码,那么 X→Y 和Y→Z 必然成立。这无意义(任何关系都存在这样的XYZ)。
③若 Y→X,则由 X 是码知 X→Y,X→Z,那么 X→Y 和 Y→Z 也必然成立,这也无意义。
结论:3NF中不存在非主属性对码的部分依赖(2NF),也不存在非主属性对码的传递依赖。
即:若R∈3NF,则R中的每一个非主属性既不部分依赖于码,也不传递依赖于码。
例:SC(Sno, Cno, Grade)∈2NF
码:(Sno, Cno),非主属性: Grade
非主属性Grade直接依赖于码(Sno, Cno)→ Grade而非传递依赖于码,故SC ∈3NF
SL(Sno, Sdept, Sloc)∈2NF
码:Sno,非主属性: Sdept, Sloc
FD:Sno →Sdept,Sdept → Sloc。则有Sno →Sloc,即存在非主属性对码的传递依赖,故SL不属于3NF
定义:设关系模式R<U, F>∈1NF,如果对于R的每个函数依赖X→Y (Y?X) ,X必包含码,则R∈BCNF(Boyce Codd Normal Form),又称修正(或扩充)的第三范式。
结论:每个非平凡函数依赖的决定因素都包含码
定理:
③若R∈BCNF,则R中所有主属性对每个不包含它的码都完全函数依赖。
证明:设A是主属性,K是码,A?K。根据码的定义可得K→A;假设此依赖为部分依赖,那么存在K’?K,使得K’→A,A?K’。但K’不包含码,这与BCNF定义矛盾。
④若R∈BCNF,则R中没有任何属性完全函数依赖于非码的任何一组属性。(去除了对码的传递依赖的可能)
证明:设X为非码属性组,A?X,X→A为完全依赖。由BCNF定义知,X含有码。于是存在码K?X且K→A。这与X→A为完全依赖矛盾。
例:关系模式SJP(S, J, P) 中,S是学生,J表示课程,P表示名次。每一学生选修每门课程的成绩都有一定名次,且名次不重复。
FD: (S, J)→P,(J, P)→S
码: (S, J) ,(J, P)
非主属性:无
①不存在非主属性对码的部分依赖 SJP∈2NF
②不存在非主属性对码的传递依赖 SJP∈3NF
③每一个函数依赖的决定因素都包含码S∈BCNF
例:在关系模式STJ(S, T, J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课。每门课由若干教师教,某一学生选定某门课,就确定了一个固定的教师。某个学生选修某个教师的课就确定了所选课的名称。
由语义得如下FD:
(S, J)→T,(S, T)→J,T→J
函数依赖图:
码: (S, J), (S, T)
非主属性:无
①不存在非主属性对码的部分依赖 STJ ∈2NF
②不存在非主属性对码的传递依赖 STJ ∈3NF
③存在函数依赖T→J,其中的决定因素T不包含码 STJ ? BCNF
结论:BCNF消除了主属性对码的部分依赖和传递依赖,在函数依赖的范畴内解决了数据插入异常和删除异常,但可能存在着数据冗余和修改复杂。
1NF
↓ 消除非主属性对码的部分函数依赖
2NF
↓ 消除非主属性对码的传递函数依赖
3NF
↓ 消除主属性对码的部分和传递函数依赖
BCNF
↓ 消除非平凡且非函数依赖的多值依赖
4NF
- sql 范式
- sql 范式
- SQL范式
- SQL范式
- sql 范式
- sql 范式
- sql范式
- SQL 范式
- SQL范式
- sql 范式
- Sql范式
- sql 三个范式
- 99sql+三范式
- SQL 数据库三范式
- SQL的范式理论
- sql 范式 转
- SQL范式规则
- SQL数据库范式
- LinuxMint笔记:eclipse安装使用
- 关于Java中System.exit(n)的理解
- Android 动画框架详解,第 1 部分
- 神奇的fans
- wordcount例子的程序,附带说明
- SQL范式
- 10684 我要摇出一个妹子[C]
- Perl--包
- JM8.6中帧内帧间模式选择
- 从java虚拟机底层理解java语言运行机制 001
- AVL树的建立完整C代码
- vim
- php毫秒时间截
- Linux中大括号扩展参数的使用方法