資料庫設計三大正規化

2021-08-16 23:49:35 字數 2337 閱讀 1212

資料庫設計三大正規化

為什麼要遵循三大正規化去設計資料庫?

比如說在我們的現實世界中,要去建造一棟房子,如果蓋一間茅屋或一間簡易平房,會有人花錢去請人設計房屋圖樣嗎?毫無疑問,沒有人會去請。 但是如果是房地產開發商開發乙個樓盤,修建多幢樓的居住小區,他會去請人設計圖紙嗎?答案是肯定的。不但開發商會考慮去設計圖樣,甚至很多專業的購房者也會在看房的是要求開發出示設計圖樣。

同理,在我們的實際開發中,如果系統的資料儲存量較大,設計的表比較多,表和表之間的關係比較複雜,就需要首先考慮規範化的資料庫設計,然後再進行具體的建立庫 、表的工作。為了設計結構合理的資料庫,必須遵循一定的規則,在關聯式資料庫中這種規則就稱為正規化,正規化是符合某一種設計要求的總結。

1、第一正規化(1nf)

第一正規化的目的是確保每列的原子性。如果每列(或者每個屬性值)都是不可再分的最小資料單元(也稱為最小的原子單元),則滿足第一正規化。(

個人理解就是無重複列或列不可分

)。需要注意的是:第一正規化的合理遵循需要根據系統的實際需求來定。比如某些資料庫系統中需要用到"位址"這個屬性,本來直接將"位址"屬性設計成乙個資料庫表的字段就行,但如果系統經常會訪問"位址"屬性中的"城市"部分,那麼就非要將"位址"這個屬性進行重新拆分為省分、城市、詳細位址等多個部分進行儲存,這樣在對位址中某一部分操作的時候將非常方便。這樣設計才滿足了資料的第一正規化,如下表二所示。

比如說使用者表一(未拆分)

編號姓名

性別年齡

位址1001張三男

20***省

***市

***區

***路

***號

1002李麗女

23yyy省

yyy市

yyy區

yyy路

yyy號

1003

風清揚男

56ooo省

ooo市

ooo區

ooo路

ooo號

使用者表二(拆分後)

編號姓名

性別年齡

省份城市

詳址1001張三男

20***省

***市

***區

***路

***號

1002李麗女

23yyy省

yyy市

yyy區

yyy路

yyy號

1003

風清揚男

56ooo省

ooo市

ooo區

ooo路

ooo號

2、第二正規化(2nf)

第二正規化在第一正規化的基礎上更進一層,其目標是確保表中的每一列都和主鍵相關。如果乙個關係滿足第一正規化(1nf),並且除了主鍵以外的其他列都全部依賴於該主鍵,則滿足第二正規化(2nf)。

通俗理解就是說在乙個資料庫表中,乙個表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中。

比如說要設計乙個訂單資訊表,因為訂單中可能會有多種商品,所以要將訂單編號和商品編號作為資料庫表的聯合主鍵,如下表所示。

訂單資訊表

訂單編號

商品編號

商品名稱

數量單位

**客戶

所屬單位

****

這樣就產生乙個問題:這個表中是以訂單編號和商品編號作為聯合主鍵,這樣就在該錶商品名、單位、商品**等資訊不與主鍵相關,而僅僅是與商品編號相關。所以在這裡就違反了第二正規化的設計原則。

而如果把這個訂單資訊表進行拆分,把商品資訊分離到另乙個表中,把訂單專案表也分離到另乙個表中就完美了。如下所示。

訂單資訊表

訂單編號

客戶所屬單位

****

訂單專案表

訂單編號

商品編號

數量商品資訊表

商品編號

商品名稱

單位商品**

然而,把上表進行拆分,這樣就完全符合第二正規化設計要求。

3、第三正規化(3nf)

第三正規化(3nf)在第二正規化的基礎上更進一層,第三正規化的目標是確保每列都和主鍵列直接相關,而不是間接相關,如果乙個關係滿足第二正規化(2nf),並且除了主鍵外的其他列都只能依賴於主鍵列,列和列之間不存在相互依賴關係,滿足第三正規化(3nf)。

通俗理解

:不能存在傳遞依賴。 除了主鍵外,其他字段必須依賴主鍵

例如:爸爸兒子

兒子的手機

兒子的電腦

因為上表的手機和電腦屬於兒子,因此不符合第三正規化,對上表進行拆分

爸爸資訊表

爸爸兒子

兒子資訊表

兒子兒子的手機

兒子的電腦

總結資料庫設計規範化能讓我們更好地適應變化,使你能夠改變業務規則、需求和資料而不需要重新構造整個系統。

資料庫設計三大正規化資料庫設計三大正規化

為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...

資料庫設計三大正規化

為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...

資料庫設計三大正規化

為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...