mysql的正規化 Mysql中的正規化

2021-10-18 11:46:35 字數 3610 閱讀 2699

目錄

正規化定義

第一正規化

第二正規化

第三正規化

反正規化正規化定義

正規化:normal format,是一種離散數學中的知識,是為了解決資料的儲存與優化的問題:儲存資料的儲存之後,凡是能夠通過關係尋找出來的資料,堅決不再重複儲存,終極目標是為了減少資料的冗餘。

正規化背景:

1、是為了解決資料冗餘

2、是為了資料的優化與儲存

3、儲存資料之後,可以通過關係得到的資料,不再儲存

正規化概念:

1、是一種分層結構的規範,分為6層

2、每一層都比上一層更嚴格

4、正規化在資料庫中具有指導意義,但是不強制規範

5、資料庫不僅要考慮空間問題,還要考慮效率問題,一般用前第三層

6、六層正規化, 1nf是最底層,要求最低;6nf最高層,最嚴格.

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

第一正規化:確保每一列不可再分

要求1、在設計表儲存資料時候,如果表中設計的字段儲存的資料,在取出來使用之前還需要額外的處理(拆分),那麼表的設計不滿足第一正規化

2、第一正規化要求字段具有原子性、不可再分割

例如:講師代課表

講師性別

班級教室

代課時間

代課時間(開始/結束)

朱元璋male

php0226

d302

30天2014-02-27,2014-05-05

朱元璋male

php0320

d206

30天2014-03-21,2014-04-20

朱元璋female

php0320

d206

30天2014-06-01,2014-06-15

上表設計不存在問題: 但是如果需求是將資料查出來之後,要求顯示乙個老師從什麼時候開始上課,到什麼時候結課:, 則需要將代課時間進行拆分: 不符合1nf, 資料不具有原子性, 可以再拆分.

解決方案

解決方案: 將代課時間拆分成兩個欄位就解決問題.

講師性別

班級教室

代課時間

開始結束

朱元璋male

php0226

d302

30天2014-02-27

2014-05-05

朱元璋male

php0320

d206

30天2014-03-21

2014-04-20

花木蘭female

php0320

d206

30天2014-06-01

2014-06-15

第二正規化:確保表中每一列都和主鍵有關

要求1、在資料表設計過程中,如果有復合主鍵(多欄位主鍵),且表中有字段並不是由整個主鍵來確定,而是依賴於主鍵中的某個字段(主鍵的部分)

2、存在字段依賴主鍵的部分的問題,稱之為部分依賴

3、第二正規化就是解決表設計不允許出現部分依賴

講師帶課表

講師性別

班級教室

代課時間

開始結束

朱元璋male

php0226

d302

30天2014-02-27

2014-05-05

朱元璋male

php0320

d206

30天2014-03-21

2014-04-20

花木蘭female

php0320

d206

30天2014-06-01

2014-06-15

復合主鍵: 講師+班級

以上表中: 代課時間,開始和結束欄位都與當前的主鍵(講師和班級)有關係, 但是性別並不依賴班級, 教室不依賴講師, 性別只依賴講師, 教室只依賴班級, 出現了性別和教室依賴主鍵中的一部分: 部分依賴.不符合第二正規化.

解決方案

解決方案1: 可以將性別與講師單獨成表, 班級與教室也單獨成表.

解決方案2: 取消復合主鍵, 使用邏輯主鍵

邏輯主鍵:沒有業務含義,比如自增主鍵

業務主鍵:有業務含義,比如person錶用身份證號當主鍵

id講師

性別班級

教室代課時間

開始結束

朱元璋male

php0226

d302

30天2014-02-27

2014-05-05

朱元璋male

php0320

d206

30天2014-03-21

2014-04-20

花木蘭female

php0320

d206

30天2014-06-01

2014-06-15

第三正規化:確保每一列都和主鍵列直接相關,而不是間接相關

要求1、要滿足第三正規化、必須滿足第二正規化

2、理論上講,應該一張表中的所有欄位都應該直接依賴於主鍵,如果表設計中存在乙個字段,並不直接依賴主鍵,而是通過某個非關鍵字段依賴,最終實現依賴主鍵,把這種不是直接依賴主鍵,而是依賴非主鍵欄位的依賴關係稱之為傳遞依賴

3、第三正規化就是解決傳遞依賴的問題

講師帶課表

id講師

性別班級

教室代課時間

開始結束

朱元璋male

php0226

d302

30天2014-02-27

2014-05-05

朱元璋male

php0320

d206

30天2014-03-21

2014-04-20

花木蘭female

php0320

d206

30天2014-06-01

2014-06-15

主鍵: id

以上設計方案中: 性別依賴講師存在, 講師依賴主鍵; 教室依賴班級,班級依賴主鍵: 性別和教室都存在傳遞依賴.

解決方案

將存在傳遞依賴的字段,以及依賴的字段本身單獨取出,形成乙個單獨的表, 然後在需要對應的資訊的時候, 使用對應的實體表的主鍵加進來.

講師帶課表

id講師id

班級id

代課時間

開始結束

30天2014-02-27

2014-05-05

30天2014-03-21

2014-04-20

30天2014-06-01

2014-06-15

講師表id

講師性別

朱元璋male

花木蘭femle

教室表id

講師性別

php0226

d302

php0320

d206

反正規化有時候,在設計表的時候,如果一張表中有幾個字段需要從另外的表中去獲取資訊,理論上講,的確可以獲得想要的資料,但是效率低一點,會刻意的在某些表中,不去儲存另外表的主鍵,而是直接儲存想要的資料資訊,這樣一來,在查詢資料的時候,一張表可以直接提供資料,而不需要多表查詢((效率低),但是冗餘會增加

站在巨人的肩膀上摘蘋果:

Mysql中的正規化

資料庫中的正規化有第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 巴斯 科德正規化 bcnf 第四正規化 4nf 第五正規化 5nf 又稱完美正規化 第一正規化 資料庫中的表 所有字段值 都是不可分割的原子資料項。第二正規化 資料庫表中的每一列都和主鍵相關,而不能只和主鍵的某一部分相關。...

mysql中的正規化

正規化 normal format,是一種離散數學中的知識,是為了解決資料的儲存與優化的問題 儲存資料的儲存之後,凡是能夠通過關係尋找出來的資料,堅決不再重複儲存,終極目標是為了減少資料的冗餘。正規化 是一種分層結構的規範,分為六層,每一層都比上一層更加嚴格,若要滿足下一層正規化,前提是滿足上一層正...

mysql的正規化 Mysql正規化與反正規化的利弊

mysql正規化與反正規化的利弊 一 三大正規化 第一正規化 1nf是對屬性的原子性,要求屬性具有原子性,不可再分解 第一正規化是最基本的正規化。如果資料庫表中的所有字段值都是不可分解的原子值,就說明該資料庫表滿足了第一正規化。資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原...