数据库设计范式
1NF
-
概念
1NF,第一范式,数据模型中一个实体的所有属性的值都是单一的,这样的实体的被称为符合第一范式。
-
例子
图片1这是一个描述CD(唱片)的模型,我们可以看到Songs这个属性当中有重复的值,如歌曲名字,歌曲长度等描述歌曲的属性,因此Song可以抽象为一个实体来描述,如图2:
图片2改进之后,CD和Song实体的属性都是单一的值,因此符合第一范式。
2NF
-
概念
如果实体符合第一范式,并且其所有非标识属性都完全依赖于实体的唯一标识,则称实体符合第二范式。
-
例子
图片3
图2中,CD的属性BandName(乐队名)不完全依赖于CD ID,因为一个乐队可能是两张不同CD的BandName,因此我们应该为BandName创建一个新实体。BandName是用来描述乐队的,或者,更一般来说,它描述的是一位表演者,把它作为一个新的实体,并添加一个属性BandName, 但不是所有的表演者都是一个乐队,因此重命名为ArtistName,创建一个新的模型,如图3:但这个模型还不符合第二范式,Record Label(唱片公司)属性对每张CD都是唯一的值,但在多个CD行中可以看到相同的唱片公司,因此需要把Record Label单独作为一个实体,如图4,这个数据模型符合第二范式:
图片4
3NF
-
概念
如果实体符合第二范式,并且其所有非标识属性均不依赖于其他任何非标识属性,则称这个实例符合第三范式。非标识属性是不作为实体标识的一部分的任何属性。对于依赖于其他非标识属性的属性,可以将依赖属性和它所依赖的属性都移到一个新的实体当中。
-
例子
图片5
为了演示第三范式,在Record Label表中增加地址信息,如图5:其中,State Name为州名,State Abbreviation为州名缩写,这里有个问题:State Name和State Abbreviation彼此依赖,如果State Name改了,那么State Abbreviation也必须改变,这显然不符合第三范式,解决方案是将这两个属性分离出来创建一个新的实体,如图6,最后的模型,符合第三范式:
图片6