用通俗的讲解,让你更懂关系数据库。
话不多说,接下来正文:
第一范式(1NF)
书本定义:若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式。
试问就以上这种说法有多少人能理解?写书的人真不考虑读者的心。
接下来看我的:
我的定义:第一范式就是要求表中的每个字段都必须是原子性的,即每个字段只能包含一个值,不能包含集合、数组或重复的组。
目标:消除表中的重复列组,使得每个字段的值都是不可分割的原子值。
示例:
1. 不符合1NF:
订单ID | 商品
-------|----------
1 | 商品A, 商品B
2 | 商品C
2.符合1NF:
订单ID | 商品
-------|------
1 | 商品A
1 | 商品B
2 | 商品C
第二范式(2NF)
书本定义:若关模式R∈(属于)1NF,且每一个非主属性完全依赖主码时,则关系式R是2NF。
这句话说的云里雾里的,完全不知道啥意思。
我的定义:第二范式要求表格首先满足第一范式,并且每个非主属性完全依赖于主键,而不是仅依赖于主键的一部分。也就是说,所有的非主键字段必须对整个主键有完全的函数依赖。
目标:消除对主键部分依赖的冗余数据。
示例:
1. 不符合2NF:
学生ID | 课程ID | 学生姓名 | 课程名
-------|--------|----------|------
1 | 101 | 张三 | 数据库
1 | 102 | 张三 | 网络
2 | 101 | 李四 | 数据库
其中"学生姓名"仅依赖于"学生ID",而不是"学生ID, 课程ID"这个复合主键。
2. 符合2NF:
学生表:
学生ID | 学生姓名
-------|---------
1 | 张三
2 | 李四
课程表:
课程ID | 课程名
-------|------
101 | 数据库
102 | 网络
学生课程表:
学生ID | 课程ID
-------|------
1 | 101
1 | 102
2 | 101
第三范式(3NF)
书本定义:当2NF消除了非主属性对主码的传递函数依赖,则成为3NF。
我的定义:第三范式要求表格首先满足第二范式,并且所有非主键字段之间不存在传递依赖。即非主键字段必须直接依赖于主键,而不能依赖于其他非主键字段。
目标:消除传递依赖,确保数据的完全依赖于主键。
示例:
1. 不符合3NF:
学生ID | 学生姓名 | 学生所在系
-------|----------|-----------
1 | 张三 | 计算机系
2 | 李四 | 信息系
"学生所在系"依赖于"学生姓名",而"学生姓名"依赖于"学生ID",形成了传递依赖。
2. 符合3NF:
学生表:
学生ID | 学生姓名 | 系ID
-------|----------|-----
1 | 张三 | 1
2 | 李四 | 2
系表:
系ID | 系名
-----|-----
1 | 计算机系
2 | 信息系
BCNF(博茨-科得范式)BC范式
书本定义:如果关系模式R∈(属于)1NF,且没个属性都不传递依赖于R的候选码,那么称R是BCNF范式。
我的定义:BCNF是第三范式的一个加强版,它要求表格中的每一个决定因素都必须是候选键。即,如果一个属性(或一组属性)决定了其他属性,那么这个决定因素必须是一个候选键。
目标:消除因非主属性决定主属性而导致的依赖性异常。
示例:
1.不符合BCNF:
课程ID | 教师 | 课程名
-------|------|------
101 | 张老师 | 数据库
102 | 李老师 | 网络
在这个例子中,"教师"决定了"课程名",但"教师"不是候选键,因此不符合BCNF。
2. 符合BCNF:
课程表:
课程ID | 课程名
-------|------
101 | 数据库
102 | 网络
教师课程表:
教师 | 课程ID
----|------
张老师 | 101
李老师 | 102
第四范式(4NF)
书本定义:如果关系模式R∈(属于)1NF,若对于R的每个非平凡多值依赖X->->Y且Y不包含于X时,X必含有码,则关系模式R(U,F)∈4NF。
我的定义:第四范式要求表格首先满足BCNF,并且消除多值依赖。即一个表格不能存在一个属性集合独立于其他属性集合的多值依赖。
目标:消除多值依赖,使得表中的每个属性集都是独立的。
示例:
1.不符合4NF:
学生ID | 课程 | 兴趣
-------|------|-----
1 | 数学 | 阅读
1 | 物理 | 游泳
在这个例子中,"学生ID"到"兴趣"和"课程"之间存在多值依赖。
2.符合4NF:
学生课程表:
学生ID | 课程
-------|------
1 | 数学
1 | 物理
学生兴趣表:
学生ID | 兴趣
-------|-----
1 | 阅读
1 | 游泳
剩余还有两种更高的范式:
第五范式(5NF)
定义:第五范式要求表格首先满足第四范式,并且消除连接依赖。即一个表格中的所有连接依赖都应由候选键来决定。
目标:确保所有数据可以通过候选键组合来完全表示。
示例:
1.不符合5NF:
课程ID | 教师ID | 教室ID
-------|--------|-------
101 | 1 | A
101 | 2 | B
102 | 1 | A
在这个例子中,"课程ID"与"教师ID"和"教室ID"之间的组合关系需要消除连接依赖。
2.符合5NF:
课程表:
课程ID | 教师ID
-------|-------
101 | 1
101 | 2
102 | 1
教室表:
课程ID | 教室ID
-------|-------
101 | A
101 | B
102 | A
第六范式(6NF)
定义:第六范式要求表格首先满足第五范式,并且消除所有的时间依赖。即在表格中,数据应当表示到时间戳级别的变化,以便处理涉及时间变化的数据。
目标:处理数据的时间依赖性,确保时间变化数据的准确性和完整性。
示例:
1.不符合6NF:
员工ID | 部门 | 生效日期
-------|------|---------
1 | A | 2023-01-01
1 | B | 2024-01-01
在这个例子中,"部门"的变化与时间依赖有关,需要消除时间依赖。
2.符合6NF:
员工部门表:
员工ID | 部门
-------|------
1 | A
1 | B
生效日期表:
员工ID | 部门 | 生效日期
-------|------|---------
1 | A | 2023-01-01
1 | B | 2024-01-01
总结:
这些范式通过逐步消除数据冗余和异常,提高了数据库的设计质量和数据一致性。不同的范式侧重于解决不同类型的数据依赖和冗余问题。