2013-09-05 71 views
2

我想創建一個分支到BranchEmployee和員工到BranchEmployee之間的一對一關係。整個想法是分離在分支機構工作的員工數據。 我正在使用SQL Server Management Studio,但我正在爲此苦苦掙扎。在BranchEmployee中,BranchID和UserID組合在一起成爲表的主鍵。在SQL Server管理工作室中創建一對一的關係

非常感謝

截屏如下

enter image description here

回答

1

爲什麼連這樣做呢?您可以直接將外鍵添加到Employee表中的分支。這刪除了一個額外的表,並使您的模式更簡單。我看到的唯一情況是,如果每個員工總是從分支轉移到分支,或者連接到多個分支,但這兩種情況看起來都不太可能,尤其是因爲您認爲要建模1-1關係而不是NN關係。

長話短說,放棄那個BranchEmployees表。

+0

a 1 to 1?一個分支有多少員工,但員工有一個分支? – automatic

+0

我在此引用OP。 – ApplePie

+0

抱歉意味着評論問題而不是您的答案 – automatic

0

很可能,您實際上有1:N關係或M:N關係。

如果用戶可以正好工作一個和唯一一個分支(1:N),那麼您可以在Employee表中使用BranchID(FK),或使用'extra'BranchEmployee(Link)表。 。提供給您在BranchEmployee(鏈接)表上的(BranchID,UserId)上的唯一約束。

大多數人會更喜歡將BranchID(FK)放在Employee表中,因爲那是少量表。

但是,假設您想要隔離這些數據,並輸入關於該關係的一些元數據。說「員工在此日期開始在分行」,即EmployeeBranchStartDate。

然後額外的表格會更有意義。通知我說「一點」。

BranchEmployee(Link) (Table) 
----------- 
BranchEmployeeLinkSurrogateKey 
BranchId (FK) 
UserId (FK) 
EmployeeBranchStartDate (datetime) 
(unique on BranchId, UserId) 

就我個人而言,我現在將與BranchEmployee(鏈接)一起去。因爲如果我可能需要一個員工在兩個分支工作(這會將關係改變爲M:N)的相當好的機會,那麼我不必重新設計一切。我可以簡單地刪除(在BranchId,UserId上的唯一)約束。另外,稍後的一些預防性設計可以節省很多心痛。

相關問題