我想創建一個分支到BranchEmployee和員工到BranchEmployee之間的一對一關係。整個想法是分離在分支機構工作的員工數據。 我正在使用SQL Server Management Studio,但我正在爲此苦苦掙扎。在BranchEmployee中,BranchID和UserID組合在一起成爲表的主鍵。在SQL Server管理工作室中創建一對一的關係
非常感謝
截屏如下
我想創建一個分支到BranchEmployee和員工到BranchEmployee之間的一對一關係。整個想法是分離在分支機構工作的員工數據。 我正在使用SQL Server Management Studio,但我正在爲此苦苦掙扎。在BranchEmployee中,BranchID和UserID組合在一起成爲表的主鍵。在SQL Server管理工作室中創建一對一的關係
非常感謝
截屏如下
爲什麼連這樣做呢?您可以直接將外鍵添加到Employee
表中的分支。這刪除了一個額外的表,並使您的模式更簡單。我看到的唯一情況是,如果每個員工總是從分支轉移到分支,或者連接到多個分支,但這兩種情況看起來都不太可能,尤其是因爲您認爲要建模1-1關係而不是NN關係。
長話短說,放棄那個BranchEmployees表。
很可能,您實際上有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上的唯一)約束。另外,稍後的一些預防性設計可以節省很多心痛。
a 1 to 1?一個分支有多少員工,但員工有一個分支? – automatic
我在此引用OP。 – ApplePie
抱歉意味着評論問題而不是您的答案 – automatic