狂學資料庫之候選碼的演算法

2021-10-04 15:37:43 字數 2045 閱讀 7375

在了解候選碼的演算法之前,先了解一下閉包

計算屬性集閉包的思路是:從給定的屬性集出發,如果發現包含了某個函式依賴左邊的 屬性,就把其右邊的屬性增加進來,不斷地擴充該集合。最終,當該集合再也無法擴充套件時, 得到的結果就是閉包。這種計算屬性集閉包的流程圖如圖:

具體步驟:

第一步,設最終將成為閉包的屬性集是 x,把 x 初始化為。 

第二步,重複搜尋和判斷函式依賴 b1b2…bm→c。如果左邊所有的屬性 b1,b2,…, bm都在屬性集 x 中,但是屬性 c 不在 x 中,則將 c 新增到屬性集 x 中。

第三步,重複第二步,直到沒有屬性可以新增到屬性集 x 中為止。

第四步,最後得到的不能再新增的屬性集 x 就是

+的值。

舉例說明更清楚一些:

例如,設關係 r(a,b,c,d,e,f)有這些函式依賴:ab→c,bc→ad,d→e 和 cf→b。求 ab 的閉包。

首先從 ab 出發,令 x=。由於函式依賴 ab→c 左邊的所有屬性都在 x 中,所 以可以把該依賴右邊的屬性 c 新增到 x 中。這時,x= 。

考慮函式依賴 bc→ad,由於該函式依賴的左邊都在 x 中,因此可以把屬性 a 和 d 添 加到 x 中。因為 a 已經在 x 中了,所以只需把 d 新增在 x 中。

這時,x=。 再考慮函式依賴 d→e。由於該函式依賴的左邊在 x 中,因此可以把屬性 e 新增到 x 中。這時,x=。

最後考慮函式依賴 cf→b。由於該依賴的左邊不是全部在 x 中,所以該依賴就不能包 括在閉包中。 最後,得到的 ab 閉包為+=。

在求解之前先要明白一些定理。我們把函式依賴集中f中的屬性分為四類:

l類:所有依賴關係中僅出現在函式依賴左部的屬性。

r類:所有依賴關係中僅出現在函式依賴右部的屬性。

lr類:所有依賴關係中即出現在函式依賴左部又出現在函式依賴右部的屬性。

n類:所有依賴關係中沒有出現的屬性。

定理一:對於給定的關係模式r及其函式依賴集f,若x(x∈u)是l類屬性,則x必為r的任一候選碼的成員。

定理二:對於給定的關係模式r及其函式依賴集f,若x(x∈u)是r類屬性,則x不在任何候選碼中。

定理三:對於給定的關係模式r及其函式依賴集f,若x(x∈u)是lr類屬性,則x可能在候選碼中。

定理四:對於給定的關係模式r及其函式依賴集f,若x(x∈u)是n類屬性,則x必包含在r的任一候選碼中。

設有關係模式r(a,b,c,d,m,n),函式依賴集f={n→d,m→d,d→b,bc→d,dc→n},r的候選碼為 ()。

第一步:

先判斷所有屬性屬於哪一類。c僅僅出現在bc→d

dc→n左邊,屬於l類。m僅僅出現在m→d左邊,屬於l類

第二步:

由定理可知,c,m必出現在候選碼中,因為不知道候選碼中是否還有其他屬性,假定目前候選碼k=cm

第三步:

求k=cm的閉包,根據閉包演算法可得cm+=cmdbn,可知不等於u。因此在這時可以從屬性中選擇乙個屬性和cm組成臨時候選碼k。

第四步:

抽取a組成臨時候選碼k,由閉包演算法求得:acm+=u得出acm為候選碼,

當然這個題看到這裡就知道是acm了

最後,如果第四步中在lr類中取乙個屬性的組合都不滿足k的閉包等於資料集u,則從lr類中取2個,3個,……n個,分別組合,直到選出乙個資料集k的閉包等於屬性集u,k就是r的乙個屬性集。

end!!!

資料庫原理之候選碼的求解

r a1,a2,an 和函式依賴集f,屬性分4類 l類 僅出現在f的函式依賴左部的屬性 r類 僅出現在f的函式依賴右部的屬性 n類 在f的函式依賴兩邊均未出現的屬性 lr類 在f的函式依賴兩邊均出現的屬性 對於給定的關係模式r及其函式依賴集f,1.如果x x r 是l類屬性,則x必為任一候選碼的成員...

資料庫中候選碼的求解

若p為r上的乙個屬性集,如果u完全依賴於p,則稱p為m上的候選碼。解釋一下上面那句話的意思 例如 關係r a,b,c 滿足函式依賴m a b,a c,b ac 如果p的閉包為u的話,那麼p就為u上的候選鍵 其中u為r中所有的元素即abc 在上面例題中的r a,b,c 中,a的閉包為abc,a就為r上...

資料庫中的超碼 候選碼 主碼

碼是資料系統中的基本概念。所謂碼就是能唯一標識實體的屬性,他是整個實體集的性質,而不是單個實體的性質。它包括超碼,候選碼,主碼。超碼是乙個或多個屬性的 集合,這些屬性可以讓我們在乙個實體集中唯一地標識乙個實體。如果k是乙個超碼,那麼k的任意超集也是超碼,也就是說如果k是超碼,那麼所有包含k的集合也是...