banner
veritas

veritas

github

如何快速確定是1NF或2NF或3NF

題外話#

這類題型一般伴隨著判斷候選關鍵字的結合考法,所以本文在介紹如何區分範式時首先先介紹如何確定候選關鍵字

候選關鍵字的求法:根據依賴集,找出從未在右邊出現過的屬性,必然是候選鍵之一,以該屬性為基礎,根據依賴集依次擴展,看能否遍歷所有屬性,將無法遍歷的加入候選鍵中。

下面我們接著討論如何區分範式

相關概念及案例解析#

  • 1NF:強調的是列的原子性,即列不能夠再分成其他的幾列
    例如:下圖中,圖書可以分解為圖書號和書名,此時不屬於1NF
    image

  • 2NF:1.要滿足第一範式2.每個非主屬性要完全函數依賴於候選鍵,或者是主鍵(主碼)。
    PS:只有在複合字段作主鍵時,才可能出現不滿足2NF的情況
    例如:
    下圖中可以根據前面提到的方式,判斷出該關係模式的候選碼為EM,而函數依賴集中存在M→L,並不是由EM直接得出,所以存在部分函數依賴不屬於2NF
    image

  • 3NF:1.首先要滿足第二範式 2.非主屬性之間不存在函數依賴(或者說不存在傳遞依賴)。
    意思就是此時主屬性為A,A→B,A→D,此時不能出現B→C這種情況

  • BCNF:1.滿足前面的所有低級範式要求 2.主碼(主鍵)之間不存在依賴
    例如:
    image

總結#

範式

作用

特點

1NF:

滿足原子性,字段不可再分割

字段都是單一屬性

2NF:

滿足完全依賴,消除部分子函數依賴(列不能混著用)

要求我們使用唯一主鍵

3NF:

消除非主屬性傳遞依賴

非主屬性之間不能存在函數依賴

BCNF:

消除主屬性傳遞依賴

主碼(主鍵)之間不存在依賴

只要是關係型數據庫的表,都滿足第一範式。第一範式本質更多的是對關係型數據庫的一個限定。

第二、第三範式更多的是對數據庫表合理設計的一個要求,理解第二、第三範式能夠更好的幫助我們設計數據庫表。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。