2011-10-24 35 views
0

我有一個關於自聯接的架構問題。用於EF中的自聯接的最佳SQL體系結構

我有一個具有唯一的int標識符的對象表。對象可以單獨存在或作爲對象集合的一部分存在。集合表示爲同一個表中的一個對象,但其類型設置爲集合。

e.g

1 | ObjectName | IsolatedObject 
2 | CollectionName1 | CollectionObject 
3 | CollectionName2 | CollectionObject 

對象先前可能屬於0或多個集合,因此我有存儲的映射

例如另一個表

2 | 1 
3 | 1 

已做出決定,他們現在只能屬於1個集合。我的問題是保留現有的額外表或更改對象表是否有一個存儲唯一標識的ParentID字段更好?

這也與EF一起使用,因此關係映射可能變得複雜。

感謝您提前提供任何幫助。

回答

0

通常在應用層中強制執行完整性約束(也就是保持原樣離開數據結構)不會立即引起問題,但可能會長期運行。將數據結構保持原樣可能是一種很好的中間解決方案,直到最終用戶可以修改所有數據以適應新的政策/要求,但我們在我的辦公室中有一句名言:「如果數據可以放在那裏,它會放在那裏';這意味着如果參照完整性允許它,你可以打賭它會發生。

我的建議是儘可能快地到達ParentID/Self-referencing模型,如果這是真正爲需求建模的解決方案;當然這必須與預算,時間,用戶承諾等平衡......

+0

好建議謝謝道格。 – Michael

1

如果樹中有多個分組,但是如果只有一個分組,則它是過度殺傷性的,您的映射表是一個很好的「可擴展」解決方案「水平」。 IE:如果一個對象集合可以擁有一個主對象,而不是其他任何主對象,那麼通過所有方法做一個自我連接。 但是,如果對象集合也可以是主,那麼您當前的映射解決方案會更好。

原因是「你需要走樹嗎?」 要返回SQL中的所有關係,您需要重新查詢每個級別的表(遞歸)。 如果只有隔離的對象可以是主,那麼一個查詢可以返回所有值

相關問題