对于我的数据,使用Table-Per-Type模式将导致'子类'只有一列的表(父表的主键)。
通过在子表中没有自动增量主键,我可以在为连接执行连接时跳过该表,但是对于具有foriegn关系的其他表中的插入仍然具有强类型。
我的情况有点复杂,但归结为以下示例:
有一个'客户'和' Salesrep'子类。
人员表有自动增量ID和姓名/地址/电话。子类没有专门的信息(只是Person表的外键),只需指明类型。
CustomerOrder表可以有一个对Customer表的外键引用,一个对Salesrep表的引用
这样,当我插入客户订单时,它强制执行我不会为这两个字段获取错误类型的Person。 但是,当我做一个级联'在CustomerOrder上阅读,我只加入Person而不需要额外加入“客户”#39;和' Salesrep'表。
这种方法有什么问题吗?这是一个已知/命名的模式吗?
看起来很奇怪,只有一列的表格,我不会看到很多人这样做,但我看不出有什么问题。我可以将其作为person表中的类型字段,但是让外键在CustomerOrder等其他表中工作很麻烦(需要复合键?)。
(我想我必须在代码中确保同一个人不会出现在Customer和SalesRep表中,但这比在所有引用Person的表中强制执行的东西更容易)
答案 0 :(得分:1)
据我所知,你的方法没有错。您正在遵循连接表继承模式,其中子表(表示子类)通过其主键(也是引用超级表的外键)连接到它们的超级表。
当然,在子表中没有很多(或任何)附加列的情况下,通常会使用单表继承方法只使用一个表persons
和type
(或category
)列。但是,正如您所指出的,这将意味着对customer
类的salesRep
和CustomerOrder
属性的约束,这些属性无法实现为customer_orders
表的简单外键。相反,似乎需要触发器来强制执行这些约束。
因此,在更复杂的Joined Tables继承表示与customer
和salesRep
的参照完整性约束的简单实现之间进行权衡,而不是更简单的表示(具有单表继承) )使用更复杂的参照完整性约束实现。