資料庫之三正規化

2021-06-26 01:34:38 字數 1553 閱讀 5032

如果不想看理論性的數的話,又想重溫一下資料庫知識,又是日本動漫迷的話,可以看一下:

作為漫畫和專業知識結合在一起的點子十分有創意,而且讀起來也有趣。

資料庫通過e-r,entity-relationship模型進行資料庫的設計,根據具體的關係。

一對多,乙個職員對多個客戶。如果只有乙個職員。

多對一,反過來。

多對多,多個職員對多個客戶。

確定關係後,還需要進行normalization,規範化,分三正規化。

先看看非規範化:

你會發現乙個王國裡面的商品又有兩個列,你設計資料庫的時候不會這樣吧。

規範化有什麼用呢?你一改一樣水果的單價,就要全部都要改動,如果規範化之後,將水果單獨分開,那就不會造成矛盾了。

第一正規化:

第一正規化,商品和訂單分開。如果蘋果單價一變化,就不用將非正規化表中含有蘋果的**全部改過。

每一列都是不可分割的,除去了非規範式中的重覆記錄(記錄就是一行)。

但是,存在的問題是,如果商品沒有賣出去過,那麼數量為0,也沒有報表編碼,但是我們確實需要商品的名稱,單價和商品編碼。

所以,繼續看第二正規化。

第二正規化:

商品的名稱,單價和商品編碼單獨做成乙個表,通過商品編碼這一列確定其他兩個欄位的值,這種原則成為函式依賴(functionally dependent)通過主鍵確定其他列的值。

回頭看看報表編碼,出口國編碼這個表,第二正規化。

報表編碼可以確定出口國編碼,確定出口國編碼後再確定出口國名稱。

問題所在,出口國編碼雖然能通過一列確認其他值,但是如果出口國根本就沒有進口過,那麼所謂的商品編碼便是不存在的。

第三正規化:

只能由主鍵確定其他列值,而第二正規化中出現的,由報表編碼可以確定出口國編碼,確定出口國編碼後再確定出口國名稱。這種通過某一列的值間接確定另外一列的值,我們成為傳遞依賴,第三正規化去除傳遞依賴。

其實報表編碼,商品編碼,數量這乙個表,和商品編碼,商品名稱,單價這乙個錶不只滿足第二正規化了,也滿足第三正規化了。

但是,第二正規化中,報表編碼,口國編碼,出口國名稱的表卻不滿足第三正規化,因為有傳遞依賴,分割之後就滿足第三正規化了。

總結一下:

第一正規化:列不可分,行中沒有重覆記錄。

第二正規化:通過主鍵確定其他列的值,通過其他列又確定其他列的值,會存在傳遞依賴。

第三正規化:只能通過主鍵確定其他列的值,不存在傳遞依賴,其實第三正規化就是特殊的第二正規化。

資料庫之三正規化

第一正規化 無重複的列 定義 資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。如果實體中的某個屬性有多個值時,必須拆分為不同的屬性 通俗解釋 乙個欄位只儲存一項資訊 eg 班級 高三年1班,應改為2個字段,乙個年級 乙個班級,才滿足第一正規化 不滿足第一正規化 第二...

資料庫之三大正規化

在前面我們已經介紹了 屬性值的概念,我們說,它是 不可分的 而第一正規化要求屬性也不可分。那麼它和屬性值不可分有什麼區別呢?給乙個例子 name address age小明 山東省濟寧市 13小紅 遼寧省大連市 12表中的address屬性實際上的可分的 這種情況不滿足第一正規化。不滿足第一正規化的...

資料庫設計之三正規化

上圖表的設計明顯不符合第一正規化,因為列下面又出現了復合列,破壞了資料庫中的每一列都必須不可拆分的最小單元的原則。實際上在現有的relational dbms中,這種結構的表也是建立不出來的,關係型資料庫不允許把資料庫表的一列再分成兩列或者多列,所以在關係型資料庫中建立的表均滿足最基礎的第一正規化。...