MySQL筆記九:資料庫三正規化
阿新 • • 發佈:2022-04-10
第一正規化:要求任何 一張表必須有主鍵,每一個欄位原子性不可再分
第二正規化:在第一正規化的基礎上,要求所有非主鍵欄位完全依賴主鍵,不要產生部分依賴
第三正規化:在第二正規化的基礎上,要求所有非主鍵欄位直接依賴主鍵,不要產生傳遞依賴
9.1第一正規化
最核心最重要,所有的表的設計都要滿足
原子性不可再分:比如聯絡方式(包括郵箱+電話)就是原子性可分的,把它拆成兩個欄位才是原子性不可分
9.2第二正規化
學生編號+老師編號(pk) 學生姓名 老師姓名
1001 001 張三 王老師
1002 002 李四 趙老師
1003 001 王五 王老師
1003 002 王五 趙老師
滿足第一正規化,但是不滿足第二正規化,因為多對多關係中欄位之間有部分依賴,資料冗餘了,那麼怎麼修改才能滿足第二正規化?
技巧:多對多,三張表、關係表兩外來鍵
將一張表拆分成三張表:學生表、老師表、學生老師關係表
學生老師關係表
id(pk) 學生編號 老師編號
1 1001 001
2 1002 002
3 1003 001
4 1003 002
9.3第三正規化
一對多關係滿足第一正規化和第二正規化,但不滿足第三正規化
技巧:一對多,兩張表,關係表加外來鍵
9.4資料庫設計總結
一對多:兩張表,關係表加外來鍵
多對多:三張表,關係表兩外來鍵
一對一:實際開發中,一張表的欄位太多,這個時候需要拆分表
技巧:一對一,外來鍵唯一
設計表格的最終目的都是為了滿足客戶需求,有時會拿冗餘換速度,這是因為表之間的連線越多,效率越低(笛卡爾積現象),因此有時候表格資料存在冗餘,但是為了提升效率,一定的冗餘也是合理的