數據庫範式:三大範式、BC範式和反範式化

一、什麼是數據庫範式

無規矩不成方圓,同理範式是數據表設計的一些約束和規範。爲了讓各個屬性間的關係更加合理,減少數據冗餘。

一般來說,主要滿足 3NF 就可以了,因爲範式過高,雖然對數據關係有更好的約束,可也會導致數據表的增加,從而讓數據庫 IO 更加繁忙,冗餘度更低。當然,凡事沒絕對,有時爲了提高某些查詢性能,需要反規範化。

二、三大範式和 BC 範式

一般來說,數據表設計主要遵循三大範式:1NF(第一範式)、2NF(第二範式)和 3NF(第三範式)。越高的範式必須要符合比它低的範式要求,比如 2NF 除了要滿足自身的要求,還須滿足 1NF 的要求。

  • 1NF(第一範式):是範式中最基本的範式,爲了避免重複性,要求每個列的值域由原子值組成和每個字段的值都只能是單一值。

  • 2NF(第二範式):要求表數據和表鍵(主鍵和候選鍵)有完全依賴關係。每個非鍵屬性必須獨立於任一候選鍵的一部分屬性。

  • 3NF(第三範式):要求非主屬性之間應該是獨立無關聯,只和候選鍵有關聯。不允許非主屬性被另一個非主屬性決定,但允許主屬性被非主屬性決定。

  • BCNF(BC 範式,Boyce-Codd normal from):是基於 3NF 的改進範式。與 3NF 主要區別在於任何屬性都不能被非主流屬性所決定。

三、反範式化

有時爲了提高性能和讀取效率,允許少量的數據冗餘。也就是要反範式化,用空間換時間。

範式化和反範式化的區別:

  • 範式化可以減少數據冗餘,但因爲查詢需要多表關聯,很難優化不同表中的索引。
  • 反範式化能減少表的關聯,增加讀取效率,可以更好地優化索引,但數據會冗餘。

四、關係型數據庫的鍵和鍵屬性

  • 超鍵:能夠標識多行的屬性集。

  • 候選鍵:不含有多餘屬性的超鍵。

  • 主鍵:每個數據表只能有一個主鍵,它不能爲空值(NULL)。因爲主鍵是用於唯一定位數據的,確認了不好再修改,所以最好是完全與業務無關的字段。

    如果是 INT 自增類型,數據上限是約 21 億。BIGINT 自增類型上限約有 922 億。

  • 外鍵:如果表 A 中某個屬性不是本表主鍵,而是另一個表 B 的主鍵,即這個屬性是表 B 的外鍵。也可以不設置外鍵約束,僅靠應用邏輯保證數據操作正確性。

    關聯關係:一對一、一對多和多對多。

  • 主屬性:包含任一候選鍵中的屬性。

  • 非主屬性:不包含任一候選鍵中的屬性。

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