我有一個包含對象的表,這樣的事情:分組記錄使用或不使用外鍵約束
PK ObjectId
FK ObjectTypeId
Description
etc
的對象需要進行分組。我得到了很多建議,所有這些都「有用」,有些我比其他人更喜歡。沒有一個是完美的,所以我正在努力解決任何特定的模型。
1 /添加一個自引用外鍵。這是乾淨的,但並不理想,因爲(a)沒有邏輯父項(它是一個組,而不是一個層次結構),(b)它可能是LINQ到SQL遍歷自引用層次結構的一個痛苦 - 需要檢查是否當前對象是一個「父」或「兒童」對象等
PK ObjectId
FK ParentObjectId
2 /添加父表&外鍵。這增加了限制,但Group表不包含任何有用的信息 - 它只存在提供GroupId約束的標識。
Table Object
PK ObjectId
FK GroupId
Table Group
PK GroupId
3 /添加的GroupId沒有約束或外鍵。沒有數據完整性。理論是,當插入一個新的對象組時,每個對象都被賦予GroupId =第一個分配的ObjectId。可能是最簡單的最實用的解決方案。
例如
ObjectId GroupId
...
15 10
16 16
17 16
...
21 16
22 22
我的問題是哪些在理論和/或實踐中是最好的,以及爲什麼。或者,請告訴我一個更好的方法來做到這一點!我個人喜歡(2),因爲它是正常化的,但我被告知只有一個字段的表是不好的設計。想法和建議?
是在sql server中實現的FK約束,並且您試圖跟蹤它們,還是您正在設計一個包含數據庫元數據的數據庫? –
不確定你指的是哪個例子。我正在嘗試對對象進行分組,並且這些都是爲實現這一要求而提出的實現。 –