第一范式,第二范式,第三范式
Posted on 2012-05-09 16:30 GISerYang 阅读(2) 评论(0) 编辑 收藏
第一范式
存在非主属性对码的部分依赖关系 R(A,B,C) AB是码 C是非主属性 B-->C B决定C C部分依赖于B
第一范式
定义:如果关系R 中所有属性的值域都是单纯域,那么关系模式R是第一范式的
那么符合第一模式的特点就有
1)有主关键字
2)主键不能为空,
3)主键不能重复,
4)字段不可以再分
例如:
StudyNo | Name |
Sex | Contact
20040901
john
Male Email:[email protected],phone:222456
20040901
mary famale
email:[email protected] phone:123455
以上的表就不符合,第一范式:主键重复(实际中数据库不允许重复的),而且Contact字段可以再分
所以变更为正确的是
StudyNo | Name |
Sex |
Email
| Phone
20040901
john
Male [email protected]
222456
20040902
mary
famale [email protected]
123455
第二范式
存在非主属性对码的传递性依赖 R(A,B,C) A是码 A -->B ,B-->C
定义:如果关系模式R是第一范式的,而且关系中每一个非主属性不部分依赖于主键,称R是第二范式的。
所以第二范式的主要任务就是
满足第一范式的前提下,消除部分函数依赖。
StudyNo | Name |
Sex |
Email
| Phone |
ClassNo | ClassAddress
01
john
Male [email protected]
222456
200401 A楼2
01
mary famale [email protected]
123455
200402 A楼3
这个表完全满足于第一范式,
主键由StudyNo和ClassNo组成,这样才能定位到指定行
但是,ClassAddress部分依赖于关键字(ClassNo-〉ClassAddress),
所以要变为两个表
表一
StudyNo | Name |
Sex |
Email
| Phone | ClassNo
01
john
Male [email protected] 222456
200401
01
mary
famale [email protected]
123455 200402
表二
ClassNo | ClassAddress
200401 A楼2
200402 A楼3
第三范式
不存在非主属性对码的传递性依赖以及部分性依赖 ,
StudyNo |
Name | Sex |
Email
|
bounsLevel | bouns
20040901
john
Male [email protected]
优秀
$1000
20040902
mary
famale [email protected]
良
$600
这个完全满足了第二范式,但是bounsLevel和bouns存在传递依赖
更改为:
StudyNo | Name |
Sex |
Email
| bouunsNo
20040901
john
Male [email protected] 1
20040902
mary
famale [email protected]
2
bounsNo | bounsLevel |
bouns
1
优秀
$1000
2
良
$600
这里我比较喜欢用bounsNo作为主键,
基于两个原因
1)不要用字符作为主键。可能有人说:如果我的等级一开始就用数值就代替呢?
2)但是如果等级名称更改了,不叫 1,2 ,3或优、良,这样就可以方便更改,所以我一般优先使用与业务无关的字段作为关键字。
一般满足前三个范式就可以避免数据冗余。
ZT 第一范式,第二范式,第三范式,布布扣,bubuko.com