資料庫三正規化

2021-10-07 01:26:21 字數 1798 閱讀 6907

一、關係資料結構及形式化定義

二、函式依賴

三、資料庫三正規化

1nf:一張二維表必須滿足分量是不可分割的資料項。也就是乙個屬性只表達一種資訊,不要用乙個屬性表達多種資訊。

下面這張二維表就不滿足第一正規化。

idname

info1張三

2李四年齡:21

2nf:在滿足1nf後,每個非主屬性完全函式依賴於任何乙個候選碼。

下面這張二維表就不滿足第二正規化。【sno-學號,cno-課程號,sname-學生名字,cname-課程名字】

snocno

sname

cname11

張三語文12

張三數學21

李四語文22

李四數學

對於上面這張二維表,(sno, cno)是候選碼,也是主鍵,所以sno,cno是主屬性,sname和cname是非主屬性。(sno,cno)的值可以唯一確定sname,也可以唯一確定cname,所以(sno,cno)->sname,(sno,cno)->cname。但是我們發現,sno可以唯一確定sname,cno可以唯一確定cname;這就意味著:(sno,cno)->sname,(sno,cno)->cname都是部分函式依賴,所以不滿足第二正規化。

如何解決?看下面:

stu表。

snosname1張三

2李四course表。

cnocname1語文

2數學這樣拆分成兩張表後,sno -> sname,cno -> cname,就滿足了第二正規化。

第二正規化告訴我們:不要把多個實體整到一張表裡,乙個實體對應一張表,就像物件導向中設計類時遵從單一職責原則一樣。

3nf:滿足1nf後,不存在碼x,屬性組y和非組屬性z,使得x->y,y->z成立。

第三正規化中除了包含第二正規化,還進行了更嚴格的約束。

如果在3nf中加入前提:y是x的一部分,那麼3nf就是2nf了。

x = (sno, cno) ,y = sno ,z = sname,那麼就會出現x->y,y->z成立,不滿足3nf。

同理,x = (sno, cno) ,y = cno ,z = cname,那麼就會出現x->y,y->z成立,同樣不滿足3nf。

如果在3nf中加入另外一種前提:y不是x的一部分,那麼又是在約束哪一種情況呢?

下面就是。【sno-學號,sname-學生姓名,sdept-系名,sloc-系的位址】

stu表。

snosname

sdept

sloc1張三

數學系a角落2李四

語文系b角落

sdept表。

sdept

sloc

數學系a角落

語文系b角落

對於stu表而言,sno是主鍵,sdept是外來鍵,sdept和sloc都是非主屬性。sno可唯一確定sdept,sno -> sdept,sdept又可以唯一確定sloc, sdept->sloc,把sno換成x, sdept換成y,sloc換成z,就出現了 x->y,y->z,又不滿足第三正規化了。

那麼如何解決呢?看下面。

stu表。

snosname

sdept1張三

數學系2

李四語文系3張三

語文系sdept表。

sdept

sloc

數學系a角落

語文系b角落

那麼第三正規化告訴了我們什麼:除了乙個實體對應一張表之外,還要求外來鍵不能出現冗餘,能一列搞定的事就不要出現第二列第三列。

資料庫正規化 三正規化

所謂第一正規化 1nf 是指在關係模型中,對域新增的乙個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化 1nf 表中的每個域值只能是實體的乙個屬性或乙個屬性的...

資料庫三正規化

資料庫的三正規化 1n 關係r中的屬性都是不可分割的項.2n 在1n的基礎上,每個非主屬性完全函式依賴於碼.3n 在2n的基礎上,每乙個非主屬性既不部分依賴於碼也不傳遞依賴於碼.1n 消除非主屬性對碼的部分函式依賴 2n 消除非主屬性對碼的傳遞函式依賴 3n 消除主屬性對碼的部分和傳遞函式依賴 bc...

資料庫三正規化

1 第一正規化 1nf 無重複的列 所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義乙個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關係。在第一正規化 ...