范式问题

在了解范式问题之前,需要明确的概念

(1)键和码在数据库中真是傻傻分不清楚

候选码:不含多余属性的超码,即对于候选码,若要多删除一个属性,就不是超码

超码:在关系中,能唯一标识元组的属性集

主键:用户选作元组标识的一个候选键称为主键

一个实体集可以有多个候选码,但是只能有一个主键

主属性:候选码中的属性

非主属性:与主属性相对的属性即为非主属性

已知关系模式R,R中属性A以及R上的函数依赖集F,如果A包含在R的某个候选键中,则称A为主属性,否则为非主属性

如何求关系模式的候选键?

可以从函数依赖的角度进行求解


(2)函数依赖问题

U{A1,A2,…,An}是属性集合,R(U)是U上的一个关系,x、y是U的子集。若对于R(U)下的任何一个可能的关系,均有x的一个值对应于y的唯一具体值,称y函数依赖于x,记作x→y。   其中x称为决定因素

部分函数依赖:设X,Y是关系R的两个属性集合,存在X->Y,若存在集合Xˊ是X的真子集,存在Xˊ->Y,则Y部分依赖于X

完全函数依赖:设X,Y是关系R的两个属性集合,存在X->Y,集合Xˊ是X的真子集,但对于任意一个Xˊ!->Y,则Y完全函数依赖于X

传递函数依赖:设关系模式R,X,Y,Z是R的属性子集,若存在X->Y,Y!->X,Y->Z,则有X->Z,即Z传递依赖于X

平凡函数依赖:如果X->Y,且Y属于X,即Y是X的子集,则X->Y是平凡的函数依赖

非平凡函数依赖:与非平凡函数依赖对应的就是非平凡函数依赖

e.g. R(A,B,C)  其中函数依赖集为F={B->C, B->A, A->BC},判断R是几范式:

R是BCNF,主键是A(或者B),非主属性为BC(或者AC),不存在传递依赖和 部分依赖,所以为BCNF。注意⚠️:虽然A ->B->C,但是B->A,违背了传递函数依赖的定义,所以A->B->C 不是传递函数依赖


回到开始提到的那个问题,如何求得关系模式的候选键?

从函数依赖集的角度出发,可以将属性(组)分成以下几类:

(1)L类:全部出现在函数依赖的左半部

(2)R类:全部出现在函数依赖的右半部

(3)LR类:出现在函数依赖的左右两边

(4)N类:不出现在函数依赖中

其中,可能成为候选键的有L类,LR类和N类,

对于L类:求出它的闭包,如果闭包包含所有属性,则其成为唯一的候选键

对于LR类:求出其闭包,如果包含所有属性,则为候选键

对于N类:直接成为候选键


INF:如果一个关系模式R中的每个属性A的域值都是原子的,即属性值是不可再分的,则关系模式R属性第一范式

2NF:设关系模式R(U,F),U是属性集合,F是函数依赖集合,如果R是INF且所有非主属性完全依赖于R的每个键,则R是第二范式

3NF:设关系模式R(U,F),如果R是第二范式,且在R中没有非主属性传递依赖于R的键,则R是第三范式

BCNF:设关系模式R(U,F),如果R是第三范式,且R中没有任何属性传递依赖于R的键,则R是BCNF

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容