這裏是一個SQL Server/ADO.Net實體框架問題:我正在尋找「最好」的方式來做到這一點。SQL Server/ADO.Net:具有多部分FK主鍵的實體,其中一部分是可選的?
我具有類似於下面的對象的分層結構:
Company -> Division -> Department -> Group -> Specialty
每個的主鍵(除其他公司)由一個外鍵指向每個祖先的PK的。所以,專業看起來是這樣的:
[PK/FK] CompanyID (string)
[PK/FK] DivisionID (int)
[PK/FK] DepartmentID (int)
[PK/FK] GroupID (int)
[PK] SpecialtyID (int)
Name (string)
Description (string)
此基礎結構必須留在原地的原因,我不會去 - 所以使用GUID的PK真的不是在卡 - 我們要與依賴於該結構反映的「Bergdorf.6.3.4.1」ID構造的其他應用程序進行交互。
但是,我現在需要做的是添加添加適用於整個Department而不是組的專業的功能。所以,在一個理想的世界,我們就會有這樣的:
[PK/FK] CompanyID (string)
[PK/FK] DivisionID (int)
[PK/FK] DepartmentID (int)
[PK/FK] GroupID (int/NULL)
[PK] SpecialtyID (int)
Name (string)
Description (string)
...等,如果專業的羣ID爲空,這意味着它適用於整個部門。
但是,當然,你不能有一個可爲空的字段作爲PK的一部分。所以這是一個不行。
它也不會將GroupID從PK中拉出來,因爲然後SpecialtyID將在整個Department中必須是唯一的,並且我們已經建立了使這不可能的ID。
由於FK約束要求我們爲每個Department創建一個ID爲-1的組,因此無法創建「特殊」GroupID(例如「-1」),意思是「無組」。
......那麼......在這裏做什麼是正確的事情?我是否必須爲專業製作GUID,並將所有FK從PK中抽出?如果可能的話,真的很想避免這種情況。
任何想法將不勝感激!
不知道我明白這將如何解決問題?請詳細說明......謝謝! – DanM 2012-03-14 02:53:04
專業是Group的孩子,而Specialty.GroupID是空的,正確的?我是否正確理解該組是子部門的孩子? – 2012-03-14 03:30:48
外部參照表背後的想法僅僅是爲了允許專業與部門之間的多對多關係。 – 2012-03-14 04:04:12