外鍵傳遞依賴
對於一項任務,我必鬚根據給定問題設計一個數據庫(基於一個具有 3 個醫療中心的虛構醫療服務組織)。
我擁有的三個實體(以及許多其他實體)是:
Branch
(實際的醫療中心;主鍵branchNo
)BranchSection
(每個醫療中心內的部分;主鍵sectionNo
;包括branchNo
作為表的外鍵Branch
。)Staff
(在醫療中心工作的人;主鍵staffNo
;包括sectionNo
外鍵BranchSection
)給定問題的要求之一是員工實體保存有關每個員工的部門和分支的資訊,因此我將該
SectionNo
屬性作為外鍵添加到員工實體中(見下文)。我故意沒有將BranchNo
屬性放入人員實體中,因為它SectionNo
決定了BranchNo
屬性,所以我認為如果我同時擁有SectionNo
和BranchNo
在人員實體中,就會存在傳遞依賴。然而,當我得到我的結果時,我因為沒有BranchNo
在員工實體中而被打分。有人可以澄清我是否正確地假設這會導致傳遞依賴,或者我的導師是否正確地標記我。這是這 3 個實體的視覺化表示(以便更容易理解我在說什麼)。
Branch
(BranchNo
,address
,telephoneNo
)BranchSection
(sectionNo
,sectionName
,branchNo
)Staff
(staffNo
,firstName
,lastName
,position
,birthdate
,telephoneNo
,sectionNo
)注意:
sectionNo
是真正的主鍵;它在所有Branch
es 中都是獨一無二的。
雖然我會說您絕對正確,而且這是正確的設計,但您的導師可能在技術上是正確的(很難說,特別是,如果您正在翻譯另一種語言 - 無法判斷您是否正確(恭喜!))。
你是對的,一個給定
sectionNo
的決定了branchNo
,因為那個值存在於BranchSection
。包括branchNo
inStaff
addition tosectionNo
是多餘的,並且確實會導致必須確保在in發生更改時更新所有連結branchNo
的值。Staff``branchNo``BranchSection
然而,你說:
給定問題的要求之一是工作人員實體保存有關每個工作人員的部門和分支機構的資訊
(重點補充)
從技術上講,
Staff
不(直接)持有有關分支的資訊;僅關於該部分。如果你還沒有和導師爭論太多,我會注意到維護(和規範化)問題,並問他為什麼他希望你從非規範化設計開始。
我的意思是問他,認真的。可能是有原因的。在概念層面,您確實需要將員工與他們所在的分支機構聯繫起來;也許他認為,對於高級設計,您需要保留這種東西,即使它不會在實際數據庫中以這種方式實現。也許他們希望每個人都包括它,這樣他們就可以解釋規範化的重要性(仍然是給你打分的一個不好的理由,但如果你的導師有一位真正的教授在他們之上,他們可能會過度地按照指示進行操作)。或者,也許他們正在訓練你適應現實世界;客戶有時會提出違反最佳數據庫實踐的特定要求,而您無法說服他們。
這甚至可能意味著設計存在更深層次的問題。也許
BranchSection
應該是 justSection
,並且應該適用於給定部分的所有實例,而與分支無關。如果是這樣,則不branchNo
屬於,並且每一Staff
行都需要branchNo
andsectionNo
。這不是我閱讀問題的方式,對我來說似乎不太可能,但這並非不可能。所以,特別是如果你有更多基於這個作業的作業,我會說你有正當理由要求進一步解釋,以驗證你對作業的閱讀。
如果所有其他方法都失敗了,並且導師有一位班級教授,請與他們交談。如果發生了這種情況,他們可能有接受比預期“更正確”的設計的自由度,並且可能對整個班級有更好的看法,並且可能有您需要的解釋。