第一正規化:
不要向表中輸入重複的值 ! 要有主鍵
表1 學生表
在表中有成千上萬條資料的時候,如果沒有規則的存在,可能會有很多重複的資料。解決這類問題的辦法是設立乙個主鍵,主鍵用來標識唯一的一條記錄,並且不可重複
在多個字段可以被選擇的情況下,作為主鍵的字段應該選擇最符合邏輯的乙個,一般選擇與業務無關的字段,比如自增的id。
由於效率的關係,請盡量選擇乙個數值型別的字段或者定長字串。
很明顯email欄位也不會重複,理論上也可以作為主鍵,但是效率低下。所以還是用學號作為主鍵。
第二正規化:
存在多對多關係時只有乙個字段作為主鍵是不夠的。
譬如學生和老師的關係,他們之間是多對多的關係,乙個學生可以同時學習多個老師的課,而乙個老師可以同時教多名學生,很明顯單獨用學生學號或單獨用老師編號都不足以確定一條記錄,需要把學號和教師編號的組合作為主鍵。但是學生姓名是依賴於學號的,不依賴教師編號,而教師姓名是依賴教師編號而不依賴學號,也就是說存在部分依賴,這個時候容易產生部分依賴,會產生冗餘資料,
解決這個問題的方案是把這個表分解為三個表,建立中間關聯表。
分解結果:
這樣每張表都不存在冗餘資料,並且通過表連線可以得到任意需要的資料,這種表之間不存在部分依賴的情況,稱之為符合第二正規化。
第三正規化:
一對多的關係。如果學生表中是這樣的資料
乙個班級可以擁有多個學生,乙個學生只能屬於乙個班級,但是很明顯班級名稱和班級資訊存在大量重複的出現,這些值並不直接依賴於學號(主鍵),而是依賴於班級號,也就是時說表中出現了傳遞依賴,即從學號傳遞到班級號,又從班級號傳遞到班級名稱,一旦有傳遞依賴的存在,表中就會有大量的冗餘資料。
解決這個問題的辦法是把這些和學號(主鍵)沒有直接聯絡的資訊記錄的新的表裡面,即班級表。因此,只在學生表中記錄班級編號就可以了,如果想查詢班級名稱,就想雇員表emp和部門表dept一樣,把兩張表做連線,到班級表中取查詢就可以了!(在多的一方加外來鍵)
資料庫設計三大正規化資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...
資料庫正規化 三正規化設計
資料庫第一正規化 原子性 表中每一列都不可以再分割成更小的列 資料庫第二正規化 不產生區域性依賴 每張表只描述一件事情 資料庫第三正規化 表中每列都直接依賴於主鍵,而不是通過其它列間接依賴於主鍵 什麼是資料庫正規化 學習第一正規化的應用 什麼是正規化 一種規則,指導程式設計師建立表的規則 程式設計師...
資料庫 資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...