數據庫範式

1,第一範式的限定條件如下:

1)每個列必須有一個唯一的名稱:即表中的列名唯一。

2)行和列的次序無關緊要:行與列都是無序的。

3)每一列都必須有單個數據類型:指表中列所存儲的值的類型要唯一,即一個列不能存儲兩種不同類型的數據。

4)不允許包含相同值的兩行:即等價於聲明一個有一個主鍵的表(主鍵是用來唯一標識行的一組列)。

5)每一列都必須包含一個單值:即爲常說的列的”原子性“,每個列中的值要單一化,不能包含多個值。因爲多個值存儲到單個字段中限制了該字段的效用。

6)列不能包含重複的組:該條件主要是對條件5的補充,即若是拆分單列中多值,不能使得拆分後的每個列無法區分。如若是列總包含我喜歡吃的動物(雞,鴨,兔等等),不能簡單的拆分爲animal1,animal2...而是將值分離到一個新的表中並使用exterminators表的主鍵連接回主記錄。

總結來看,第一範式主要是原子性要求。包括五個對列的約束,一個對行的約束。

2,第二範式的限定條件如下:

1)它滿足第一範式;

2)所有的非鍵值字段均依賴於所有的鍵值字段:若非鍵值字段不依賴於所有的鍵值字段,那麼將可能產生更新異常,刪除異常以及插入異常的情況。如書中提到一個鱷魚摔跤表演時間表,該表包含時間,選手,等級以及排名四個字段,其中時間與選手組成構成該表的主鍵。非鍵值字段等級與排名都依賴於選手,因爲等級與排名與選手具有依賴關係,而與時間沒有依賴關係,選手可以在任何時間進行比賽。如刪除的3:30 Mike選手的比賽,由於在表中Mike只有一次記錄,那麼隨之其等級與排名信息也將刪除,使得表中不村阿紫Mike這名選手;更新過程中若添加新的一名選手,就必須爲其安排一場比賽,這是不合理的,而且還要指定比賽時間,而這些信息是沒有的。等等以上問題是因爲不遵從範式二導致的。範式二可以歸納爲:非鍵值字段對鍵值字段的依賴關係,必須是對鍵值字段中的所有列都有依賴關係。

3,第三範式限定條件如下:

1)符合第二範式;

2)它不包含傳遞相關性:傳遞相關性指一個非鍵值字段的值依賴於一個非鍵值字段的值。如讀者俱樂部的表,包含person,書名,作者,章節頁數,出版年月,該表以person作爲主鍵,存在這樣的依賴關係---書名依賴於person,而作者,章節頁數以及出版年月三個非鍵值字段依賴於非鍵值字段書名。即出現傳遞相關性,不符合第三範式。

大多數情況下數據庫設計止步於將數據庫規範化爲3NF。

4,BCNF範式限定條件如下:

1)符合第三範式;

2)每個決定因子都是一個候選鍵;

5,第四範式限定條件如下:

1)符合BCNF範式;

2)不包含無關的多值依賴性;

6,第五範式限定條件如下:

1)符合第四範式;

2)它不包含相關的多值依賴性;

7,域/鍵範式(DKNF)限定條件如下:

1)除了(值)域約束和鍵約束之外,該表不存在其他約束;

摘自《beginning database design solutions》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章