您的位置:首页 > 数据库

数据库范式的理解

2013-08-19 16:54 127 查看
首先,数据库范式的意义是在设计数据库是尽量去掉数据冗余。然而过分的精简并不一定能够带来更高的效率,所以具体问题还要具体分析,不是一定要达到更高的范式要求的。

1NF

属性的原子性。即数据库各列中不能含有组合列,如地址属性不能为区和街道的组合。

2NF

非主属性要完全依赖于码,也就是说码是作为一个整体来决定非主属性的,不能由其中一部分就能做决定。

如属性A、B、C、D 其中(A、B)为主键,如果存在B->C那么就不符合第二范式。

解决方法是把B、C抽取出来放到新表中。

3NF

非主属性之间没有传递依赖,也就是非主属性没冗余信息。

如表(A、B、C、D),其中(A、B)为主键,如果存在C->D,那么就不符合第三范式。

解决方法是把C、D抽出来建个新表。

BCNF

就是在依赖函数中,左侧起决定作用的必须包含候选码。

偷个百科的例子:

例如:关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一个教师只教一门课。每门课有 若干个教师,某一学生选定某门课,就对应一个固定的教师。由语义可得到如下函数依赖

(S,J)->T;(S,T)->j;T->J。

(S,J),(S,T)都是候选码

STJ是3NF,因为没有任何非主属性对码传递依赖或部分依赖。但STJ不是BCNF关系,因为T是决定因素而T不包含码。

这些只是用来记忆范式的小理解,不严谨也不科学,能用来判断违反范式的情形,不能作为充要条件。

姑且用来应付笔试题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: