為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。以下為開發中最為常見的資料庫設計正規化(三大正規化)
在任何乙個關聯式資料庫中,第一正規化(1nf)是對關係模式的基本要求,不滿足第一正規化(1nf)的資料庫就不是關聯式資料庫。所謂第一正規化(1nf)是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義乙個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關係。在第一正規化(1nf)中表的每一行只包含乙個例項的資訊。如下表
訂單號日期
使用者id
使用者名稱
產品編碼
產品名稱
數量x2001
12-02
u001
白展堂p101,p102
路由器,充電寶
1,1x2002
11-30
u002
呂秀才p203,p304
手機,電腦
2,1x2003
11-11
u003
郭老闆p101,p102
路由器,充電寶
1,1在單元格產品編碼、產品名稱、數量中 擁有多個值的字段 ,它即沒有滿足我們的第一正規化,即資料只能為原子性,它在單元格中儲存了多個值。
而為了讓它滿足我們所需要的第一正規化,我們應該將其拆分出一張訂單表和一張訂單細節表來
即:訂單表
訂單號日期
使用者id
使用者名稱
x2001
12-2
u001
白展堂x2002
11-30
u002
呂秀才x2003
11-11
u003
郭老闆以及
訂單細節表
訂單號產品編碼
產品名稱
單價數量
x2001
p101
路由器137
1x2001
p102
充電寶69
1x2002
p203
手機1999
2x2001
p304
電腦7865
1x2001
p101
路由器137
1x2002
p202
充電寶69
1在我們**的訂單細節表中,可以看到
訂單號產品編碼
產品名稱
單價數量
x2001
p101
路由器137
1x2001
p102
充電寶69
1x2002
p203
手機1999
2x2001
p304
電腦7865
1x2001
p101
路由器137
1x2002
p202
充電寶69
1
如果我們想要新增乙個新的產品進入資料庫時,你會發現,我們如果單純只想要新增乙個產品,而不是增加乙個新的訂單的話,我們在此表中是新增不下去的。這就關係到了我們的第二正規化:表中的字段必須依賴於主鍵 在訂單細節表中,他是擁有兩個主鍵的,訂單號和產品編號,而產品名稱,單價都於訂單號這乙個主鍵沒有關係,即沒有滿足第二正規化,我們現在滿足第二正規化,將兩表拆分。我們即將訂單細節表拆分為訂單細節表和產品表
訂單細節表
訂單號產品編碼
數量x2001
p101
1x2001
p102
1x2002
p203
2x2001
p304
1x2001
p101
1x2002
p202
1產品表
產品編號
產品名稱
單價p101
路由器137
p102
充電寶69
p203
手機1999
p304
電腦7865
這樣,我們就滿足了第二正規化:所有表中的屬性都必須依賴於主鍵即是第二正規化
訂單表訂單號
日期使用者id
使用者名稱
x2001
12-2
u001
白展堂x2002
11-30
u002
呂秀才x2003
11-11
u003
郭老闆在以下訂單表中
訂單號關聯於使用者id 而使用者id關聯於使用者名稱這樣就使得他們之間存在依賴傳遞,使得使用者資訊無法單獨管理,這樣我們就應該繼續拆分此表,使得訂單表滿足於第三正規化
我們將訂單表繼續拆分出訂單表和使用者表
訂單表訂單號
日期使用者id
x2001
12-2
u001
x2002
11-30
u002
x2003
11-11
u003
使用者表使用者id
使用者名稱
u001
白展堂u002
呂秀才u003
郭老闆這樣,我們就滿足了第三正規化了:不出現依賴傳遞
在我們實際開發中 ,滿足三大正規化即表示要拆分多個表,我們在實際使用查詢或者獲得最初沒有拆分的表時,即需要自己寫入join將拆分的表鏈結起來,而如果表中資料量非常巨大的時候,join對於資料庫的查詢是非常耗時的,所有我們允許為了效能對於表中存在一點冗餘,因為一起都是為了效能而服務。
資料庫三大正規化是什麼,資料庫正規化
關係規範化是一種基於函式依賴理論對關係進行分析及分解處理的形式化技術,它將乙個有異常資料操作的關係分解成更小的 結構良好的關係,使該關係有最小的冗餘或沒有冗餘。關係規範化給設計者提供了對關係屬性進行合理定義的指導。有了規範化關係設計,我們對資料庫可以實現高效的 正確的操作。關係規範化技術涉及一系列規...
為什麼要使用NoSQL資料庫
工作中遇到的挑戰 1,高併發讀寫 web2.0 資料庫併發負載非常高,往往達到每秒上萬次的讀寫請求 2,高容量儲存和高效儲存 web2.0 通常需要在後台資料庫中儲存海量資料,如何儲存海量資料並進行高效的查詢往往是乙個挑戰 3,高擴充套件性和高可用性 隨著系統的使用者量和訪問量與日俱增,需要資料庫能...
為什麼要使用NoSQL資料庫
工作中遇到的挑戰 1,高併發讀寫 web2.0 資料庫併發負載非常高,往往達到每秒上萬次的讀寫請求 2,高容量儲存和高效儲存 web2.0 通常需要在後台資料庫中儲存海量資料,如何儲存海量資料並進行高效的查詢往往是乙個挑戰 3,高擴充套件性和高可用性 隨著系統的使用者量和訪問量與日俱增,需要資料庫能...