数据库第一部分,我们先来熟悉数据库的三范式。
在熟悉三范式之前,大家先和小编一起了解一些概念:
一、键
1、超键
在关系中能唯一标识元组的属性集。
2、候选键
不含多余属性的超键
3、主键
用户选作元组标识的候选键
4、主属性
如果A是关系模式R的候选键的属性,那么A就是R的主属性,即候选键中的属性都是主属性。
5、关系图
6、举例
关系模式R(学号、姓名、年龄、身份证号、家庭住址)
解析:
①学号唯一标识这个元组,可以是超键
②身份证号唯一标识这个元组,可以是超键
③(学号、姓名)唯一标识这个元组,可以是超键
④(学号,姓名、年龄)唯一标识这个元组,可以是超键
–这里可以看出,超键的组合是唯一标识这个元组的,但可能不是最小唯一
①超键只含有属性学号,所以学号是候选键
②超键只含有属性身份证号,所以身份证号是候选键
③超键中有两个属性——学号和姓名,但是学号可以唯一确定一个元组,所以姓名是多余属性,学号是候选键
④同③,学号是候选键
–这里可以看出,候选键是没有多余属性的超键
主键可以是学号也可以是身份证号
–主键是选中的一个候选键
学号和身份证号都是主属性
–候选键中的属性都是主属性
二、函数依赖
对于当前关系r的任意两个元组,如果X值相同,则要求Y值也相同,即有个X值就有一个Y值与之相对应。
三、范式
第一范式:
关系模式R中的每个关系r的属性值都是不可分的原子值,则为第一范式(1NF)
——1NF是关系模式应具备的最起码的条件
第二范式:
①完全依赖
对于FD W→A,如果存在X⊆W有X→A成立,那么称W→A是局部依赖,否则为完全依赖。
②2NF
如果关系模式R是1NF,且每个非主属性完全函数依赖于候选键,则为2NF。即每个非主属性只能由候选键决定。
③例题
某销售公司数据库的零件关系P(零件号,零件名称,供应商,供应商所在地,库存量),函数依赖集F={零件号→零件名称,(零件号,供应商)→库存量,供应商→供应商所在地)。零件关系模式P属于( )。
分析:
根据函数依赖关系可以判断(零件号、供应商)为候选键,零件名称、供应商所在地、库存量为非主属性,(零件号、供应商)→零件名称,而零件号→零件名称,所以(零件号、供应商)→零件名称是局部依赖,所以为1NF。
第三范式:
①传递依赖
如果X→Y,Y→A,且X不依赖于Y和A∉Y,那么称X→A是传递依赖。
②3NF
如果关系模式R是1NF,且每个非主属性都不传递依赖于R的候选键,则为3NF。即每个非主属性可以由候选键直接决定。
③例题
建立一个供应商、零件数据库。其中“供应商”表S(Sno,Sname,Zip,City)中的属性分别表示:供应商代码、供应商名、供应商邮编、供应商所在城市,其函数依赖为:Sno→(Sname,Zip,City),Zip→City。“供应商”表S属于()
分析:
关系模式S的候选键为Sno,非主属性——Sname,Zip,City完全依赖于Sno,所以符合2NF;而非主属性Zip,City之间存在Zip→City,所以S表中存在传递依赖,所以最高为2NF。
BCNF:
①BCNF
如果关系模式R是1NF,且每个属性都不传递依赖于R的候选键,则R是BCNF模式
②例题
关系模式R2(学生、课程、成绩),函数依赖为(学生,课程)→成绩,则R2为()。
分析:
候选键为(学生、课程),主属性也为(学生、课程),非主属性为成绩,每个属性都不传递依赖于候选键,所以为BCNF。
总结
对于三范式,重点理解候选键和非主属性以及他们之间的关系——完全依赖和传递依赖。