mysql設計之三正規化 MySQL設計之三正規化

2021-10-17 23:44:19 字數 1880 閱讀 4832

資料庫設計三正規化

設計資料庫表的時候所依據的規範,共三個規範:

第一正規化:要求有主鍵,並且要求每乙個字段原子性不可再分

第二正規化:要求所有非主鍵字段完全依賴主鍵,不能產生部分依賴

第三正規化:所有非主鍵欄位和主鍵字段之間不能產生傳遞依賴

第一正規化

資料庫表中不能出現重覆記錄,每個欄位是原子性的不能再分

不符合第一正規化的例項:

第一正規化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設計之三正規化的理解

設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。但是有些時候一昧的追求正規化減少冗餘,反而會降低資料讀寫的效率,這個時候就要反正規化,利用空間來換時間。目前關聯式資料庫有六種正規化 第一正規化 ...