数据库设计范式

1NF

  • 概念

    1NF,第一范式,数据模型中一个实体的所有属性的值都是单一的,这样的实体的被称为符合第一范式。

  • 例子

    图片1

    这是一个描述CD(唱片)的模型,我们可以看到Songs这个属性当中有重复的值,如歌曲名字,歌曲长度等描述歌曲的属性,因此Song可以抽象为一个实体来描述,如图2:

    图片2

    改进之后,CD和Song实体的属性都是单一的值,因此符合第一范式。

2NF

  • 概念

    如果实体符合第一范式,并且其所有非标识属性都完全依赖于实体的唯一标识,则称实体符合第二范式。

  • 例子
    图2中,CD的属性BandName(乐队名)不完全依赖于CD ID,因为一个乐队可能是两张不同CD的BandName,因此我们应该为BandName创建一个新实体。BandName是用来描述乐队的,或者,更一般来说,它描述的是一位表演者,把它作为一个新的实体,并添加一个属性BandName, 但不是所有的表演者都是一个乐队,因此重命名为ArtistName,创建一个新的模型,如图3:

    图片3

    但这个模型还不符合第二范式,Record Label(唱片公司)属性对每张CD都是唯一的值,但在多个CD行中可以看到相同的唱片公司,因此需要把Record Label单独作为一个实体,如图4,这个数据模型符合第二范式:

    图片4

3NF

  • 概念

    如果实体符合第二范式,并且其所有非标识属性均不依赖于其他任何非标识属性,则称这个实例符合第三范式。非标识属性是不作为实体标识的一部分的任何属性。对于依赖于其他非标识属性的属性,可以将依赖属性和它所依赖的属性都移到一个新的实体当中。

  • 例子
    为了演示第三范式,在Record Label表中增加地址信息,如图5:

    图片5

    其中,State Name为州名,State Abbreviation为州名缩写,这里有个问题:State Name和State Abbreviation彼此依赖,如果State Name改了,那么State Abbreviation也必须改变,这显然不符合第三范式,解决方案是将这两个属性分离出来创建一个新的实体,如图6,最后的模型,符合第三范式:

    图片6

你可能感兴趣的:(数据库设计范式)