資料庫設計的正規化

2021-10-24 01:23:48 字數 1656 閱讀 3934

設計資料庫時,需要遵循的一些規範。要遵循後邊的正規化要求,必須先遵循前邊的所有正規化要求

設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。

目前關聯式資料庫有六種正規化:第一正規化(1nf)、第二正規化(2nf)、第三正規化(3nf)、巴斯-科德正規化(bcnf)、第四正規化(4nf)和第五正規化(5nf,又稱完美正規化)。

​ 資料庫只要遵循前三大正規化就完全沒問題了

* 每一列都是不可分割的原子資料項
什麼意思呢,看一下下面這張圖你就知道了

由此可以看出,在系這一列中有兩個子列,所以違背了第一正規化的要求每一列都是不可分割的原子資料項

那麼怎樣讓這張表滿足第一正規化呢,你可以這樣修改

注意

雖然滿足第一正規化但存在以下的問題:

1.存在非常嚴重的資料冗餘(重複):姓名、系名、系主任

2.資料新增存在問題:新增新開設的系和系主任時,資料不合法

3.資料刪除存在問題:張無忌同學畢業了,刪除資料,會將系的資料一-起刪除。

所以就要用到第二正規化和第三正規化了

在1nf的基礎上,非碼屬性必須完全依賴於碼(在1nf基礎上消除非主屬性對主碼的部分函式依賴)
幾個概念:

1. 函式依賴:a–>b,如果通過a屬性(屬性組)的值,可以確定唯一b屬性的值。則稱b依賴於a

例如:學號–>姓名。 (學號,課程名稱) --> 分數

2. 完全函式依賴:a–>b, 如果a是乙個屬性組,則b屬性值得確定需要依賴於a屬性組中所有的屬性值。

例如:(學號,課程名稱) --> 分數

3. 部分函式依賴:a–>b, 如果a是乙個屬性組,則b屬性值得確定只需要依賴於a屬性組中某一些值即可。

例如:(學號,課程名稱) – > 姓名

4. 傳遞函式依賴:a–>b, b – >c . 如果通過a屬性(屬性組)的值,可以確定唯一b屬性的值,在通過b屬性(屬性組)的值可以確定唯一c屬性的值,則稱 c 傳遞函式依賴於a

例如:學號–>系名,系名–>系主任

5. 碼:如果在一張表中,乙個屬性或屬性組,被其他所有屬性所完全依賴,則稱這個屬性(屬性組)為該錶的碼

例如:該表中碼為:(學號,課程名稱)

* 主屬性:碼屬性組中的所有屬性

* 非主屬性:除過碼屬性組的屬性

通過第二正規化可以表拆分為兩張表

回到我們第一正規化的表中存在的問題,第二正規化也只是能解決資料重複的問題

在2nf基礎上,任何非主屬性不依賴於其它非主屬性(在2nf基礎上消除傳遞依賴)

經過這樣拆分在表中不管是新增還是刪除都沒啥問題了

資料庫設計正規化

目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 第四正規化 4nf 第五正規化 5nf 和第六正規化 6nf 滿足最低要求的正規化是第一正規化 1nf 在第一正規化的基礎上進一步滿足更多要求的稱為第二正規化 2nf 其餘正規化以次類推。一般說來,資料庫只需滿...

資料庫設計正規化

前言 為什麼要寫這篇文章呢,從去年年底開始,就和很多做技術的朋友交流過,從資料庫設計到資料庫架構各個方面的內容。有一些朋友執著於orm,執著於所謂的資料庫設計,卻忘記了一切技術是要為業務服務這個基石。當然這文章裡也有一些自己的理解,想向大家表達。正規化是什麼 正規化是符合某一種級別的關係模式的集合。...

資料庫正規化設計

在軟體開發過程中,資料庫的設計是非常重要的。可以說,良好的資料庫設計,是對使用者需求的理解的精準定位。它不僅能夠使得軟體開發起來非常便捷,而且還能夠使軟體系統高效執行,同時,為日後的維護或者更換資料庫提供便利。在最近開發系統的過程中,感覺收穫最大的也是關於資料庫的操作。最初開發機房收費系統的時候,由...