(五)各种范式有什么区别

一、1NF:每一列都是不可分割的基本数据项(确保每列保持原子性)

不满足1NF例子:

此表不符合要求,因为ingredients字段中含有多个类型相同的值,若此时我要查找milk,将会是灾难。

二、2NF:满足1NF,非主属性完全依赖于主键

函数依赖:当某列的数据必须随着另一列的数据的改变而改变时,表示第一列函数依赖于第二列。

T. x -->T.y  在关系表T中,y列函数依赖于x列。从右往左就是解读依赖性的方式。

现在有表super_heroes:name、power、weakness、city、country、arch_enemy_id、arch_enemy_city(天敌)、initials

部分函数依赖:非主键的列依赖于组合主键的某一部分(但不是完全依赖于组合主键)

举例:super_heroes.name --->super_heroes.initials(首字母)主键是name、power,当主键中name改变时,initials一定会改变;当power改变时,initials并不会改变。即依赖于主键的一部分。

三、3NF:满足2NF,任何非主属性不依赖于其它非主属性(或者说非主属性都不传递依赖于主键)

courses:course_id、course_name、instructor、instruct_phone

在考虑第3范式时,主键暂时不用考虑,所以course_id不用看

当instructor改变时,instructor_phone也会改变

posted @ 2019-03-21 10:49  测试开发分享站  阅读(184)  评论(0编辑  收藏  举报