对于我的数据,使用Table-Per-Type模式将导致只有一个列(父表的主键)的“子类”表。
通过在子表中没有一个自动递增的主键,我可以在进行联接时跳过该表,但在其他具有foriegn关系的表中仍然有很强的插入类型。
我的情况有点复杂,但归结为以下示例:
这样,当我插入客户订单时,它强制要求我不会为这两个字段选择错误的人员类型。但是,当我在CustomerOrder上读取“级联”时,我只加入Person,而不需要添加到“Customer”和“Salesrep”表。
,这种方法有什么问题吗?这是已知的/命名的模式吗?
只有一个列的表似乎很奇怪,我没有看到很多人这样做,但我看不出它有什么问题。我可以将其作为person表中的类型字段来完成,但要使外键在其他表(如CustomerOrder )中工作(需要一个复合键吗?),这是很尴尬的。
(我想我必须在代码中确保同一个人不会同时出现在Customer和SalesRep表中,但这比尝试在所有引用人的表中强制执行更容易)
发布于 2015-01-27 22:18:58
据我所见,你的做法没有任何问题。您正在遵循连接表继承模式,其中子表(表示子类)通过它们的主键(也就是引用超级表的外键)连接到它们的超级表。
当然,在子表没有多个(或任何)额外列的情况下,通常会使用单表继承方法,其中只有一个表persons和一个type (或category)列。但是,正如您注意到的,这将意味着对customer类的属性CustomerOrder和salesRep的约束,这些属性不能作为customer_orders表的简单外键来实现。相反,似乎需要触发来执行这些约束。
因此,在更复杂的连接表继承表示与customer和salesRep引用完整性约束的更简单实现之间存在一种折衷,而更简单的表示(具有单个表继承)与更复杂的引用完整性约束实现之间存在权衡。
https://stackoverflow.com/questions/28176420
复制相似问题