2011-06-15 87 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)