對資料庫正規化的理解以及無損分解技巧

2021-10-02 18:43:21 字數 2205 閱讀 9194

根據函式依賴求最小依賴集

屬性列是不可拆的(原子的)

非主屬性完全依賴於候選碼(可以是完全直接依賴,也可以是完全傳遞依賴)

①要有候選碼

②不存在非主屬性傳遞依賴於候選碼

即所有非主屬性直接依賴於候選碼

是3nf一定是2nf

證明:a,b,c,d

其中(a,b)是候選碼 即(a,b)—>c,(a,b)—>d

現在假設 存在部分依賴 即b—>c

所以 (a,b)—>b—>c 即c傳遞依賴於(a,b),所以不符合3nf 所以假設不成立

因此,是3nf一定是2nf。

所有依賴的左邊都包含候選碼

舉例說明:

class(course_id, title, dept_name, credits,sec_id, semester,year ,building, room_number ,capacity, time_slot_id)

函式依賴

course_id->title,dept_name,credits

building,room_number-> capacity

course_id,sec_id,semester,year->building,room_number,time_slot_id

該模式的候選碼是

j解答:

函式依賴 course_id->title,dept_name,credits

成立,但是 course_id不是候選碼,因此class不符合bcnf

所以將class替換為

course

class-1 函式依賴 building,room_number-> capacity在class-1上成立,但是 building,room_number不會候選碼

將class-1替換成

classroom

section

這是class與section均符合bcnf

例】關係模型r,u=,f=

演算法一:將關係r轉化3nf的保持函式依賴的分解

第一步:首先計算出f的最小依賴集(演算法詳見最小函式依賴),得到f』=。

第二步:觀察u中是否有屬性不在f』中的出現,如果有,則這個個屬性組成一對關係r,並在原來的u中刪除這些屬性。而例子中u中的屬性都出現在f中,則可以跳過這一步。

第三步:對f』中的函式依賴,把左邊的相同分為一組,一組**現的所有屬性為乙個關係。如f=,左邊都為a的分為一組,出項的所有屬性組為乙個關係r。例題中左邊都不相同,所以乙個函式依賴組為乙個關係得到轉化為3nf的保持依賴分解r1,r2,r3。

演算法二:將關係r轉化3nf的既有無損連線性又保持函式依賴的分解

第一步:先將r轉化3nf的保持函式依賴的分解,由演算法一得出r1,r2,r3。

第二步:求出f的候選碼(演算法相見候選碼演算法)得出候選碼x為ad和ae。

第三步:將候選碼單獨組成關係得r4和r5,然後與保持函式依賴後的分解取並集。得r1,r2,r3,r4,r5。

第四步:觀察新組成的分解模式中,是否存在包含關係,有則去掉被包含的。如r3,r4,r5都包含於r2,則刪去,最終得到轉化3nf的既有無損連線性又保持函式依賴的分解r1,r2。

【例1】關係模式r,u=,f=,求f的最小依賴集。

第一步:f右邊單一化

得到f1=

第二步:逐個去掉x→a依賴後,設剩下函式依賴集為g,求屬性集x關於g的閉包,如果閉包包含右邊屬性a,則去掉該函式依賴。

a→b:(a)+=ac,不包含b,保留。

a→c:(a)+=ab,不包含c,保留。

abd→c:(abd)+=abcde,包含c,去掉。

abd→e:(abd)+=abcd,不包含b,保留。

e→d:(e)+=e,不包含d,保留。

(在這裡,求閉包的時候,不能再用前面去掉的函式依賴了,所以最小依賴集不唯一,寫出乙個即可。)

所以f2=

第三步:對左邊屬性單一化,x=b1b2…bi,逐個用b1→a替代原依賴x→a,判斷屬性集(x-b1)關於f的閉包,如果包含a則用x-b1代替x。

abd→e:a→e,求(bd)+=bd,不包含e,不冗餘

b→e,求(ad)+=abcde,包含e,存在冗餘則使用ad→e替換abd→e

d→e,求(ab)+=abc,不包含e,不冗餘

所以f3=

繼續第三步

ad→e:a→e,求(d)+=d,不包含e,不冗餘

d→e,求(a)+=abc,不包含e,不冗餘

所以最小依賴集fm=

我對資料庫正規化的理解

則稱為第二正規化模式。2nf 3nf bcnf的核心作用就是消除多餘的關係,從而使一張表只明確表達 唯一的某種實體關係 2nf的理解 候選鍵的作用是標識唯一的乙個實體,而非主屬性是對這個實體的進一步描述。如果某個非主屬性不完全依賴於某個候選鍵 違反1nf 而是部分依賴 依賴於候選鍵的某個子集 也就是...

資料庫概論之無損分解

無損分解指的是對關係模式分解時,原關係模型下任一合法的關係值在分解之後應能通過自然聯接運算恢復起來。反之,則稱為有損分解。設r是乙個關係模式,f是r上的乙個依賴集,r分解為關係模式的集合p 如果對於r中滿足f的每乙個關係r,都有r r1 r r2 r rn r 則稱分解相對於f是無損連線分解,否則有...

資料庫 無損分解和保持依賴

以下的論述都基於這樣乙個前提 r是具有函式依賴集f的關係模式,r1 r2 是r的乙個分解。首先我們給出乙個看似無關卻非常重要的概念 屬性集的閉包。令 為一屬性集。我們稱在函式依賴集f下由 函式確定的所有屬性的集合為f下 的閉包,記為 下面給出乙個計算 的演算法,該演算法的輸入是函式依賴集f和屬性集 ...