2016-03-22 113 views
0

假設我們有一個從主鍵外的屬性到主鍵內的屬性的函數依賴關係。我們怎樣才能擺脫這種依賴(我直覺上認爲這很糟糕)?如何擺脫關鍵依賴?

特別地,假設我們有以下功能依賴關係:

CS -> T 
T -> C 

其中CS是主鍵。在我的例子,它發生是幸運也TS最初可以是主鍵,這樣的情況被轉換爲:

TS -> C 
T -> C 

這實際上是一個情況下,我們沒有進入關鍵依賴了,但我們有部分的依賴,這可以很容易地通過拆分表我們可以解決到兩個表如下

| T | C | 

| T | S | 

但如果TS不是主鍵?我們怎樣才能擺脫的最初依賴關係/異常?

回答

0

任何「進入密鑰」在將關係分解爲Boyce-Codd標準形式(BCNF)時,給定關係R中的依賴關係將被刪除。

BCNF確保所有依賴關係爲「來自全鍵」的「」。

here如何分解成BCNF形式。

編輯

  • 從全鍵:從完整的主鍵的鍵之外。
  • 進入密鑰依賴關係:從密鑰外部進入密鑰。

而對於完整起見,其它的2型依賴性 - 被分解以2NF和傳遞依賴除去部分依賴被進一步分解成3NF除去。因此,通過進一步分解成BCNF你去除基本上所有的三種類型的依賴關係(部分,傳遞,到密鑰

1

首先,關於術語的說明:「主鍵」是用於一個關係 術語由關係數據庫管理系統 管理,而在歸一化理論 中通常使用的術語是「超級密鑰」和「候選密鑰」,或者簡稱爲「密鑰」。

其次,在你的榜樣,你都在問:

如何才能擺脫這種依賴的(我直覺地認爲它是壞的)?

的一點是,依賴其實是不好的,因爲你有異常的關係(在這種情況下,冗餘)的感覺,但你不能擺脫 這種異常,而無需其他異常現象,即正在失去功能依賴。

事實上,你可以轉換模式中BCNF,用下面的分解 模式:

R1 <(CT), {T→C}>

R2 <(ST), { }>

但是,如您所見,依賴關係CS→T不再保留,因爲沒有 subschema包含所有這三個屬性。這比冗餘性更差,因爲您可能會在數據庫中引入不一致性,即 是違反該依賴性的情況。

在實際上,這是一個典型的例子,其中所述模式是已經在第三範式(3NF) ,即,根據定義,允許從 組不屬於關鍵屬性的相關性,以一個屬性,其是關鍵 (稱爲「主要」屬性)的一部分。

因此,這種異常是普遍接受的,並且關係不分解。