資料庫設計三正規化
設計資料庫表的時候所依據的規範,共三個規範:
第一正規化:要求有主鍵,並且要求每乙個字段原子性不可再分
第二正規化:要求所有非主鍵字段完全依賴主鍵,不能產生部分依賴
第三正規化:所有非主鍵欄位和主鍵字段之間不能產生傳遞依賴
第一正規化
資料庫表中不能出現重覆記錄,每個欄位是原子性的不能再分
不符合第一正規化的例項:
第一正規化1.png
存在問題:
最後一條記錄和第一條重複(不唯一,沒有主鍵)
****字段可以再分,不是原子性的
第一正規化2.png
關於第一正規化,每一行必須唯一,也就是每個表必須有主鍵,這是資料庫設計的最基本要求,主要採用數值型或定長字串表示,關於列不可再分,應該根據具體的情況來決定。如****,為了開發上的便利可能就採用乙個字段。
第二正規化
第二正規化是建立在第一正規化基礎上的,另外要求所有非主鍵字段完全依賴主鍵,不能產生部分依賴
例項:
二1.png
確定主鍵:
二2.png
以上雖然確定了主鍵,但此表會出現大量的冗餘,主要涉及到的冗餘欄位為「學生姓名」和「教師姓名」,出現冗餘的原因在於,學生姓名部分依賴了主鍵的乙個字段學生編號,而沒有依賴教師編號,而教師姓名部分依賴了主鍵的乙個字段教師編號,這就是第二正規化部分依賴。
解決:
解決.png
如果乙個表是單一主鍵,那麼它就是復合第二正規化,部分依賴和主鍵有關係
以上是典型的「多對多」設計
第三正規化
建立在第二正規化基礎上的,非主鍵字段不能傳遞依賴於主鍵字段(不要產生傳遞依賴)
三1.png
上表中,班級名稱字段存在冗餘,因為班級名稱字段沒有直接依賴於主鍵,班級名稱字段依賴於班級編號,班級編號依賴於學生編號,這就是傳遞依賴,解決的辦法就是將冗餘字段單獨拿出來建立表:
解決三.png
以上設計是典型的一對多的設計,一儲存在一張表中,多儲存在一張表中,在多的那張表中新增外來鍵指向一的一方
幾個經典的設計:
一對一:
第一種方案:分兩張表儲存,共享主鍵
第二種方案:分兩張表儲存,外來鍵唯一
一對多:
分兩張表儲存,在多的一方新增外來鍵,
這個外來鍵字段引用一的一方中的主鍵字段
多對多:
分三張表儲存,在學生表中儲存學生資訊,在課程表中儲存課程資訊,
在學生選課表中儲存學生和課程的關係資訊
共享主鍵.png
外來鍵唯一.png
實際開發中,資料庫設計盡量遵循三正規化,但是還是根據實際情況進行取捨,有時可能會拿冗餘換速度,最終目的是要滿足客戶需求
MySQ資料庫設計之三正規化
目錄 1.資料庫設計之三正規化的介紹 2.第一正規化的介紹 3.第二正規化的介紹 4.第三正規化的介紹 5.e r模型的介紹 6.總結 正規化 對設計資料庫提出的一些規範,目前有跡可尋的共有8種正規化,一般遵守3正規化即可。如圖所示的表結構 contact name idage jason 1001...
MySQL之三正規化
一 什麼是資料庫設計正規化?資料庫表的設計依據。教你怎麼進行資料庫表的設計。二 資料庫設計正規化共有?3個.第一正規化 要求任何一張表必須有主鍵,每乙個字段原子性不可再分。第二正規化 建立在第一正規化的基礎之上,要求所有非主鍵字段完全依賴主鍵不要產生部分依賴 第三正規化 建立在第二正規化的基礎之上,...
MySQL設計之三正規化的理解
設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。但是有些時候一昧的追求正規化減少冗餘,反而會降低資料讀寫的效率,這個時候就要反正規化,利用空間來換時間。目前關聯式資料庫有六種正規化 第一正規化 ...