首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有单个列的子表的继承

使用带有单个列的子表的继承
EN

Stack Overflow用户
提问于 2015-01-27 17:29:42
回答 1查看 89关注 0票数 0

对于我的数据,使用Table-Per-Type模式将导致只有一个列(父表的主键)的“子类”表。

通过在子表中没有一个自动递增的主键,我可以在进行联接时跳过该表,但在其他具有foriegn关系的表中仍然有很强的插入类型。

我的情况有点复杂,但归结为以下示例:

  • 类中包含“Customer”和“Salesrep”子类的Person类。
  • Person表具有一个自动增量id和名称/地址/phone。子类没有专门的信息(只有Person表的外键),只需指明类型。
  • CustomerOrder表可以有对Customer表的一个外键引用和一个对Salesrep的引用。

这样,当我插入客户订单时,它强制要求我不会为这两个字段选择错误的人员类型。但是,当我在CustomerOrder上读取“级联”时,我只加入Person,而不需要添加到“Customer”和“Salesrep”表。

,这种方法有什么问题吗?这是已知的/命名的模式吗?

只有一个列的表似乎很奇怪,我没有看到很多人这样做,但我看不出它有什么问题。我可以将其作为person表中的类型字段来完成,但要使外键在其他表(如CustomerOrder )中工作(需要一个复合键吗?),这是很尴尬的。

(我想我必须在代码中确保同一个人不会同时出现在Customer和SalesRep表中,但这比尝试在所有引用人的表中强制执行更容易)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-27 22:18:58

据我所见,你的做法没有任何问题。您正在遵循连接表继承模式,其中子表(表示子类)通过它们的主键(也就是引用超级表的外键)连接到它们的超级表。

当然,在子表没有多个(或任何)额外列的情况下,通常会使用单表继承方法,其中只有一个表persons和一个type (或category)列。但是,正如您注意到的,这将意味着对customer类的属性CustomerOrdersalesRep的约束,这些属性不能作为customer_orders表的简单外键来实现。相反,似乎需要触发来执行这些约束。

因此,在更复杂的连接表继承表示与customersalesRep引用完整性约束的更简单实现之间存在一种折衷,而更简单的表示(具有单个表继承)与更复杂的引用完整性约束实现之间存在权衡。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28176420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档