資料庫三大正規化

2021-08-20 06:18:18 字數 2483 閱讀 8215

總共有八大正規化:1nf,2nf,3nf,bcnf,4nf,5nf,dknf,6nf。

參考和◆ 第一正規化(1nf):強調的是列的

原子性,即列不能夠再分成其他幾列。 

考慮這樣乙個表:【聯絡人】(姓名,性別,**) 

如果在實際場景中,乙個聯絡人有家庭**和公司**,那麼這種表結構設計就沒有達到 1nf。要符合 1nf 我們只需把列(**)

拆分為==》即:【聯絡人】(姓名,性別,家庭**,公司**)。

1nf 很好辨別,但是 2nf 和 3nf 就容易搞混淆。

這裡最好先理解一下概念

設 k 為某錶中的乙個屬性或屬性組,若除 k 之外的所有屬性都完全函式依賴於 k(這個「完全」不要漏了),那麼我們稱 k 為候選碼,簡稱為。在實際中我們通常可以理解為:假如當 k 確定的情況下,該錶除 k 之外的所有屬性的值也就隨之確定,那麼 k 就是碼。一張表中可以有超過乙個碼。(實際應用中為了方便,通常選擇其中的乙個碼作為主碼

我們可以這麼理解(但並不是特別嚴格的定義):

若在一張表中,在屬性(或屬性組)x的值確定的情況下,必定能確定屬性y的值,那麼就可以說y函式依賴於x,寫作 x → y

。也就是說,在資料表中,不存在任意兩條記錄,它們在x屬性(或屬性組)上的值相同,而在y屬性上的值不同。這也就是「函式依賴」名字的由來,類似於函式關係 y = f(x),在x的值確定的情況下,y的值一定是確定的。

完全函式依賴

在一張表中,若 x → y,且對於 x 的任何乙個真子集(假如屬性組 x 包含超過乙個屬性的話),x ' → y 不成立,那麼我們稱 y 對於 x完全函式依賴,記作 x f→ y。(那個f應該寫在箭頭的正上方,沒辦法打出來……,正確的寫法如圖1

解釋:姓名完全依賴於學號,這裡只有乙個屬性,所以是完全依賴

(學號,課名) f→ 分數 (注:因為同乙個的學號對應的分數不確定,同乙個課名對應的分數也不確定)

解釋:分數不能靠單一乙個屬性(學號或者課名)確定,所以x的

解釋:姓名可以通過學號確定,非完全函式依賴。

◆ 第二正規化(2nf):首先是 1nf成立,另外包含兩部分內容,一是表必須有乙個主碼;二是沒有包含在主碼中的列必須完全依賴於主碼,而不能只依賴於主碼的一部分。 

考慮乙個訂單明細表:【orderdetail】(orderid,productid,unitprice,discount,quantity,productname)。

因為我們知道在乙個訂單中可以訂購多種產品,所以單單乙個 orderid 是不足以成為主碼的,主碼應該是(orderid,productid)。顯而易見 discount(折扣),quantity(數量)完全依賴(取決)於主碼(oderid,productid),而 unitprice,productname 只依賴於 productid。所以 orderdetail 表不符合 2nf。不符合 2nf 的設計容易產生冗餘資料。

可以把【orderdetail】表拆分為【orderdetail】(orderid,productid,discount,quantity)和【product】(productid,unitprice,productname)來消除原訂單表中unitprice,productname多次重複的情況。

應該是(orderid,productid)

主碼)的

)◆ 第三正規化(3nf):首先是 2nf,另外非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴。即不能存在:非主鍵列 a 依賴於非主鍵列 b,非主鍵列 b 依賴於主鍵的情況。

考慮乙個訂單表【order】(orderid,orderdate,customerid,customername,customeraddr,customercity)主鍵是(orderid)。

其中 orderdate,customerid,customername,customeraddr,customercity 等非主鍵列都完全依賴於主鍵(orderid),所以符合 2nf。不過問題是 customername,customeraddr,customercity 直接依賴的是 customerid(非主鍵列),而不是直接依賴於主鍵,它是通過傳遞才依賴於主鍵,所以不符合 3nf。

但是customeridcustomername,customerid

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

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

資料庫三大正規化

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

資料庫三大正規化

第一正規化 確保每列的原子性.如果每列 或者每個屬性 都是不可再分的最小資料單元 也稱為最小的原子單元 則滿足第一正規化.例如 顧客表 姓名 編號 位址 其中 位址 列還可以細分為國家 省 市 區等。第二正規化 在第一正規化的基礎上更進一層,目標是確保表中的每列都和主鍵相關.如果乙個關係滿足第一正規...