第一范式
具有非主属性对代码部分依赖关系的r(a、b、c ) AB决定代码c是非主属性,B--C B决定C C部分依赖于b
第一范式
定义:如果关系r的所有属性的值域都是简单域,则关系模型r是第一范式
如果符合第一模式的特征
1 )有主关键词
2 )主键不能为空。
3 )主键不能重复。
4 )字段不能重新划分
例如:
study no sex contact
20040901 johnmaleemail : kkkk @ ee.net,phone:222456
20040901悲伤甜瓜,数据线famale email 3360 kkk @ fff.net phone 3360123455
上表不一致。 第一个范例:主键重复(实际上数据库不允许重复),Contact字段可以重新拆分
所以更改为正确的是
study no
20040901 johnmalekkkk @ ee.net 222456
20040902悲伤的甜瓜,数据线famale kkk@fff.net 123455
第二范式
具有非主属性对代码的传递性依赖性的r(a、b、c ) a是代码A --B、B--C
定义:如果关系模型r是第一范式,且关系的每个非主属性部分不依赖主键,则r称为第二范式。
所以第二范式的主要任务是
在满足第一范式的基础上,消除部分函数依赖。
study no (电子邮件) class address
01 johnmalekkkk @ ee.net 222456200401 a大楼2
01悲伤的甜瓜,数据线famale kkk@fff.net 123455 200402 A大楼3
本表对第一范式完全满意,
主键由StudyNo和ClassNo组成,可以位于指定的行上
但是,class地址部分依赖于关键字(classno-) class地址,
所以变成了两个表
表1
sudy no.sex phone
01 johnmalekkkk @ ee.net 222456200401
01悲伤的甜瓜,数据线famale kkk@fff.net 123455 200402
表2
classno
200401 A大厦2
200402 A大厦3
第三范式
不存在对非主属性代码的传递性依赖或部分依赖,
study no sex bouns level
20040901 john Male kkkk@ee.net优秀$1000
20040902悲伤甜瓜,数据线famale kkk@fff.net良$600
这完全满足第二个范式,但bounsLevel和bouns存在传递依赖
修改为:
study no sex bounsno
20040901 john Male kkkk@ee.net 1
20040902悲伤甜瓜,数据线famale kkk@fff.net 2
bouns no
1优秀$1000
2良600
在这里我喜欢用bounsNo作为主键
基于两个理由
1 )不以文字为主键。 “如果我的等级从一开始就用数值代替呢?
2 )但是等级名称变更时,不叫1、2、3或优、良,很容易变更,所以优先使用与业务无关的字段作为关键字。
一般来说,满足前三个范例可以避免数据冗馀。
英国广播公司
属性不再依赖于部分代码和传递函数。