資料庫三大正規化與表之間的對應關係的個人思考

2021-10-06 21:39:38 字數 928 閱讀 4758

第一正規化:原子性

資料庫的每一列不可以再分,如,「位址」這一列還可以分為「省」、「市」、「街道」,如果必須自己填寫完整的位址當然是不需要再分,但是如果需要先選出來由系統拼接的話,位址這一列必須要分成「省」、「市」、「街道」,乙個省對應多個市,乙個市對應多個街道,這種一對多的關係,3張表來儲存所有的位址,假如有n個省,每個省有m個市,每個市有j個街道。每個「省」、「市」、「街道」用2個字元表示(假設一種理想的情況),那麼所有的位址n*m*j條,使用[m+(m*n)+m*n*j]*2個字元。另一種情況位址不劃分為3個表,省市街道的資料全寫在乙個列內,那麼需要3*2個字元,表示位址n*m*j條需要n*m*j*6個字元,這還是僅僅每個人位址不同並且人數和位址數相同的情況,如果多個人對應同乙個位址(這裡只算到街道),那麼這張表將會有更多冗餘。

第二正規化:屬性完全依賴於主鍵

,每一行的資料只能與一列相關,每行記錄只能做一件事,也就是一張表只能描述一類物件.

比如一張酒店訂單表 包括  訂單號 房間號 聯絡人 聯絡人** 身份證號,而乙個人可以產生多張訂單訂多個房間,那麼在這張表中,就要把 聯絡人 聯絡人** 身份證號這些資訊重複寫n(訂單數)遍。如果把個人資訊分出來單獨存到一張表中,就不需要將身份資訊隨著訂單的增加寫多次,把相乘的資料條數變成了相加的資料條數

資料不能存在傳遞關係,即每個屬性都跟主鍵有直接關係而不是間接關係。像:a-->b-->c  屬性之間含有這樣的關係,是不符合第三正規化的。

比如student表(學號,姓名,年齡,性別,所在院校,院校位址,院校**)

這樣乙個表結構,就存在上述關係。 學號--> 所在院校 --> (院校位址,院校**)

這樣的表結構,我們應該拆開來,如下。

(學號,姓名,年齡,性別,所在院校)--(所在院校,院校位址,院校**)

同理把相乘的資料條數變成了相加的資料條數,減少了冗餘

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

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

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

關係表的規範化 規範化主要是決定關係表應該擁有哪些屬性,其目的是建立良好結構的關係表,去除關係表中的重複資料,去除關係表中的不一致的依賴性,避免在新增 刪除或者更新資料時造成錯誤或者資料不一致的異常情況。關係表的規範化首要工作是處理主鍵與屬性之間的 功能依賴 它是 正規化的基礎。第一正規化 1nf ...

資料庫三大正規化

1 第一正規化 1nf 在任何乙個關聯式資料庫中,第一正規化 1nf 是對關係模式的基本要求,不滿足第一正規化 1nf 的資料庫就不是關聯式資料庫。所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現...