在继承模型中复制列

时间:2012-01-23 22:35:23

标签: sql-server sql-server-2005 database-design

我有两个表来模拟继承关系。这由Derived.Id引用Base.Id上的外键约束表示。 Base中的某些列基本上在Derived中重复,因此可以在唯一约束和复合外键中引用它们。我想确保这两列中的这些列的值相同。理想情况下,这将使用Id +列上的复合外键来完成。但这可以防止值被改变 - 这是一个捕获22的场景。

我如何确保这些列在两个表中具有相同的值,以允许它们更新?我有完全的灵活性,所以我可以更改表的模式或做任何其他必要的事情来实现这一点。

2 个答案:

答案 0 :(得分:0)

如果列适用于所有对象,我只会将列保留在其中一个表base中。 您能举例说明使用具体示例复制列的必要性,例如base = car,具有VIN,derived = myCar,具有VIN。

此外,如果重复列是密钥的一部分,请使用级联更新。

答案 1 :(得分:0)

我没有第二个表,而是只需要Derived表中的所有列Base,并将这些列设置为可为空。如果您还添加了一个鉴别器列来确定特定记录是代表Base对象还是Derived对象,那么您已经完成了设置。

你可以设置你需要的任何约束,而不必处理不同步的重复数据,这就是为什么单表每层次结构是Hibernate(和NHibernate)用于映射继承的默认方法