Database-Design

具有兩個潛在主鍵的規範化

  • April 17, 2020

STUDENT我在第一範式中具有以下關係,其中id已被標識為主鍵(email這裡對於所有元組也是唯一的):

STUDENT(**id**, email, first_name, last_name)

我想規範化這個關係/表,使其處於第三範式(3NF)。

我已經能夠從上述STUDENT關係/表中辨識出的依賴項如下

滿的:

{ id } → { email }

傳遞:

{ email } → { first_name, last_name }

這是我感到困惑的部分。我已將其標識email為傳遞依賴項,因為它可以由主鍵 ( id) 標識,並且屬性/列email本身可以標識和確定first_nameand last_name

…如果我繼續這個想法,我最終會得到一個看起來像這樣的 3NF:

STUDENT(**id**, email)
STUDENT_INFO(**email**, first_name, last_name)

但是,STUDENT這裡的關係/表似乎非常多餘,因為它所做的只是指向另一個關係/表。我的標準化過程是否正確?還是我的依賴關係錯了?似乎只要初始關係/表有兩個候選鍵,這兩個候選鍵都可以是主鍵(id或者email兩者都可以唯一地標識每一行),我似乎總是會遇到這個問題。

這是我出錯的地方:

關於傳遞依賴,重要的是以下兩個關鍵因素:

  1. 如果 B 依賴於 A,而 C 依賴於 B,那麼 C 也依賴於 A (A → B → C)
  2. B 不是(或部分)候選鍵

在我的範例中,我將以下內容確定為傳遞依賴項:

{ email } → { first_name, last_name }

但是,情況並非如此,候選鍵email也是如此,因此,如果我們將其用作主鍵,則具有完全依賴關係:id

{ id } → { email, first_name, last_name }

引用自:https://dba.stackexchange.com/questions/249487