資料庫的三個正規化

2021-07-31 15:27:33 字數 1823 閱讀 1371

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

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

如果在實際場景中,乙個聯絡人有家庭**和公司**,那麼這種表結構就不符合1nf,應把**列拆分成家庭**和公司**。

首先是1nf,另外還有兩部分內容。

1. 乙個表必須有乙個主鍵。

2. 不在主鍵裡的列必須依賴主鍵的所有內容,而不能只依賴主鍵的一部分。

例如有乙個【選課系統表】:

學號學生

課程教材

上課地點

001張三

高等數學

高等數學(第七版)

701001

張三大學英語

大學英語(第一版)

702001

張三大學物理

大學物理第二版

703002

李四高等數學

高等數學(第七版)

704

只考慮同一門課只用一本教材的情況

主鍵為【學號】【學生】【課程】,上課地點完全依賴於【學號】【學生】【課程】,但【教材】列中的只依賴於課程,所以不符合2nf。易產生資料冗餘。

應把資料庫拆分成【選課系統】(學號、學生、課程)和【課程教材】(課程、教材)。來消除教材多次重複的情況。

表1

學號學生

課程上課地點

001張三

高等數學

701001

張三大學英語

702001

張三大學物理

703002

李四高等數學

704

表2課程

教材高等數學

高等數學(第七版)

大學英語

大學英語(第一版)

大學物理

大學物理(第二版)

不符合 2nf 的情況只會出現在主鍵由超過乙個字段構成的表中,因為對單單主鍵不存在部分依賴問題。

首先是2nf。另外非主鍵必須直接依賴於主鍵,不能存在傳遞依賴。即不能存在:非主鍵a依賴於非主鍵b,非主鍵b依賴於主鍵的情況。

訂單號購買日期

顧客id

顧客姓名

消費地點

顧客住址

00001

20170409

1001

張三深圳

上海00002

20170501

1003

李四廣州

深圳00003

20170502

1009

王五香港

北京00004

20170505

1003

李四新加坡

深圳

上述**中,主鍵為訂單號,其他列完全依賴於訂單號,符合第二正規化。但是顧客姓名和顧客住址直接依賴顧客id(非主鍵列),而不是直接依賴於主鍵,所以不符合3nf。應把該錶拆分成:

表1

訂單號購買日期

顧客id

消費地點

00001

20170409

1001

深圳00002

20170501

1003

廣州00003

20170505

1009

香港00004

20170505

1003

新加坡

表2顧客id

顧客姓名

顧客住址

1001

張三上海

1003

李四深圳

1009

王五北京

資料庫入門 三個正規化

我覺得他說的最對 我也來解釋一波,參考 資料庫系統概念 書上一開始講得什麼 組合屬性 多值屬性 都是在講 e r模型和表的區別,就是說e r模型允許存在上述子結構,而表不能,跟第一正規化的解釋沒有直接關係。第一正規化實際的解釋為 關係模式中所有的屬性的域都是原子域。舉幾個反例 存在以上屬性的關係模式...

資料庫表三個正規化

通俗地理解三個正規化 通俗地理解是夠用的理解,並不是最科學最準確的理解 第一正規化 1nf是對屬性的原子性約束,要求屬性具有原子性,不可再分解 第二正規化 2nf是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性 同一表中消除部分依賴 第三正規化 3nf是對字段冗餘性的約束,即任何字段不能由其...

資料庫三個正規化的原理

1nf,字段不可再分。這個關聯式資料庫強制了,想建立復合的字段也建立不起來。關聯式資料庫出現之前才有這個問題。2nf,主鍵依賴,就是一張表裡面的字段,必須是跟主鍵相關的,不能把無關的資料放進來。主鍵依賴,實質就是,這個資訊如果是物件的屬性,就放進來,否則就不放。3nf,就是不能重複儲存相同的資訊。這...