2011-06-15 62 views
4

我需要一些建議來建模我的數據表。我需要使用SQL Server和Hibernate在我的表上應用繼承層次結構。誰能給我看一個基本的例子?它也可以是網站上的教程。繼承Hibernate

乾杯......

+1

繼承和關係通常不順利在一起。在設計數據庫時,你*規範化*。 – gbn 2011-06-15 11:19:26

+0

你不能在MS SQL中完成它,但是你可以使用像Hibernate(或NHibernate)這樣的框架來完成繼承工作。數據庫中的基本繼承實際上只是超類表和子類表之間的一對一關係。 – Zoidberg 2011-06-15 11:19:31

+0

我也將使用hibernate。我不知道我將如何實現這一目標! – Pinchy 2011-06-15 11:37:17

回答

7

設置表以便派生表與主表共享主鍵。

enter image description here

+0

可以與基表共享主鍵會對性能產生負面影響嗎? – Pinchy 2011-06-15 11:33:53

+2

不,默認情況下,主鍵被設置爲聚簇索引。所以在這兩個方面的加入將會非常優化。 – Magnus 2011-06-15 11:37:37

+0

你認爲我也可以將這個模型與hibernate結合起來嗎? – Pinchy 2011-06-15 11:39:11

0

MS SQL Server不是面向對象的數據庫,它是一個關係型數據庫。這聽起來像你應該在你的基表上使用視圖而不是重複列。

複製列是不必要的,無疑會影響性能,維護將成爲一場噩夢。

也許編輯你的問題,包括你想要實現的更多細節。

+0

嘿!是的MS SQL不是面向對象的,但我需要一個基表。我有一張表Target,這個目標可以是一個組織或一個人。我不可能把它們放在一張普通的桌子上,我需要把它們放在不同的桌子上。能否與基表共享主鍵會對性能產生負面影響?感謝您的回覆... – Pinchy 2011-06-15 11:33:28

0

另一種方法是在複製子表的屬性,使父表的觀點(即所有的孩子選擇以共同屬性)。

CREATE VIEW Parent 
AS 
SELECT ID, Name FROM Child1 
UNION ALL 
SELECT ID, Name FROM Child2 ... 

這個問題可能是用的ID應該是唯一通過所有的子表(GUID的使用是preferrable)