我有两个表来模拟继承关系。这由Derived.Id
引用Base.Id
上的外键约束表示。 Base
中的某些列基本上在Derived
中重复,因此可以在唯一约束和复合外键中引用它们。我想确保这两列中的这些列的值相同。理想情况下,这将使用Id
+列上的复合外键来完成。但这可以防止值被改变 - 这是一个捕获22的场景。
我如何确保这些列在和两个表中具有相同的值,以允许它们更新?我有完全的灵活性,所以我可以更改表的模式或做任何其他必要的事情来实现这一点。
答案 0 :(得分:0)
如果列适用于所有对象,我只会将列保留在其中一个表base
中。
您能举例说明使用具体示例复制列的必要性,例如base = car,具有VIN,derived = myCar,具有VIN。
此外,如果重复列是密钥的一部分,请使用级联更新。
答案 1 :(得分:0)
我没有第二个表,而是只需要Derived
表中的所有列Base
,并将这些列设置为可为空。如果您还添加了一个鉴别器列来确定特定记录是代表Base
对象还是Derived
对象,那么您已经完成了设置。
你可以设置你需要的任何约束,而不必处理不同步的重复数据,这就是为什么单表每层次结构是Hibernate(和NHibernate)用于映射继承的默认方法