資料庫設計三大正規化
為什麼要遵循三大正規化去設計資料庫?
比如說在我們的現實世界中,要去建造一棟房子,如果蓋一間茅屋或一間簡易平房,會有人花錢去請人設計房屋圖樣嗎?毫無疑問,沒有人會去請。 但是如果是房地產開發商開發乙個樓盤,修建多幢樓的居住小區,他會去請人設計圖紙嗎?答案是肯定的。不但開發商會考慮去設計圖樣,甚至很多專業的購房者也會在看房的是要求開發出示設計圖樣。
同理,在我們的實際開發中,如果系統的資料儲存量較大,設計的表比較多,表和表之間的關係比較複雜,就需要首先考慮規範化的資料庫設計,然後再進行具體的建立庫 、表的工作。為了設計結構合理的資料庫,必須遵循一定的規則,在關聯式資料庫中這種規則就稱為正規化,正規化是符合某一種設計要求的總結。
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 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...