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