資料庫設計三正規化理解

2021-10-10 18:38:38 字數 1903 閱讀 8747

在網上查詢一些資料,加上自己的理解做了一些筆記:

這是設計表的依據,按照三正規化設計的表不會出現資料冗餘。

正規化說明

第一正規化(1nf)

每乙個表都需要有主鍵,每乙個欄位的具有原子性,不可再分

第二正規化(2nf)

有主鍵,非主鍵字段完全依賴主鍵,不能產生部分依賴

第三正規化(3nf)

非主鍵字段不能相互依賴

每乙個表都需要有主鍵,每乙個欄位的具有原子性,不可再分。

不符合第一正規化的示例:

該錶沒有主鍵,而且****中可以分解為郵箱欄位和手機聯絡字段,不符合不可再分。

應改為:

說明:關於第一正規化,每一行必須唯一,也就是每個表必須有主鍵,這是我們資料庫設計的最基本要求,主要通常採用數值型或定長字串表示,關於列不可再分,應該根據具體的情況來決定。如****,有時為了開發上的便利行可能就採用乙個欄位了。

有主鍵,非主鍵字段完全依賴主鍵,不能產生部分依賴。

如果乙個表是單一主鍵,那麼它就復合第二正規化,部分依賴和主鍵有關係。

(這裡的依賴指的是「取決於」的意思)

不符合第二正規化的示例:

上表滿足了第一正規化,但是資料出現了大量的冗餘。其中1001、001、張三出現了兩次,王老師和趙老師也出現了兩次,浪費了資料庫的空間。這張表不符合第二正規化,這是因為學生姓名字段依賴了學生編號主鍵,但是沒有依賴教師編號主鍵,教師姓名依賴了教師編號主鍵,沒有依賴學生編號主鍵,這就產生了部分依賴,也導致了資料冗餘。所以啊,不要隨便使用復合主鍵

如何解決?多對多,生成三張表,關係表中加兩個外來鍵

第三正規化建立在第二正規化的基礎之上,所有的非主鍵字段需要直接依賴主鍵,不能相互依賴(傳遞依賴)。

不符合第三正規化的示例:

上表滿足第一和第二正規化,但不滿足第三正規化。其班級名稱字段存在冗餘,因為班級名稱字段沒有直接依賴於主鍵(學生編號,班級名稱怎麼可能依賴學生的編號呢),班級名稱字段依賴於班級編號,而班級編號則依賴於學生編號,那麼這就是傳遞依賴

如何解決?將冗餘字段單獨拿出來建立表:一對多?兩張表,多的表加外來鍵。

第一正規化:有主鍵,具有原子性,字段不可分割;

第二正規化:完全依賴,沒有部分依賴;

第三正規化:沒有相互(傳遞)依賴。

資料庫設計盡量遵循三正規化,但在實際開發中,以滿足客戶的需求為主,有的時候會拿冗餘換執行速度。

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

資料庫第一正規化 原子性 表中每一列都不可以再分割成更小的列 資料庫第二正規化 不產生區域性依賴 每張表只描述一件事情 資料庫第三正規化 表中每列都直接依賴於主鍵,而不是通過其它列間接依賴於主鍵 什麼是資料庫正規化 學習第一正規化的應用 什麼是正規化 一種規則,指導程式設計師建立表的規則 程式設計師...

資料庫設計正規化理解

看書的時候有一點迷不好理解,所以找了個時間查了一下。參考文件 設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3...

資料庫三正規化理解

1.第一正規化 1nf 資料庫列不可再分,即資料庫的字段不可再下分,如進貨包含有單價和數量那麼資料庫設計時應設計為兩列 進貨數量 進貨單價 2.第二正規化 2nf 資料庫表中的每個例項或行必須可以被唯一的區分,且非主屬性需要完全依賴於主鍵,如果存在不依賴於主鍵的屬性,這些屬性應該分離出來形成乙個新的...