首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PostgreSQL:多个继承表(一对父母的一个子表)

PostgreSQL:多个继承表(一对父母的一个子表)
EN

Database Administration用户
提问于 2016-09-29 11:00:18
回答 1查看 4.3K关注 0票数 1

如果我有一个base表和2个或更多继承它的表,child1child2,我可以将一个记录插入到子表中,它将如您所期望的那样显示在base中。然而,我想知道的是,有可能在child1child2中都有记录吗?

例如,basevehiclechild1boatchild2car,我想插入一辆两栖车(实际上是一艘船和一辆汽车)。

我知道我可以用正常的方式,通过建立关系来做到这一点,但从理论上讲,如果可以像描述的那样做的话,这是很好的。

EN

回答 1

Database Administration用户

发布于 2017-01-03 22:14:39

  1. 我建议永远不要使用继承,即使在简单的单继承情况下也是如此。
  2. 不知道你为什么认为这不可能。

我绝对不会这么做的.如果你真的是受虐狂,你也有多重继承。来自继承文档

一个表可以从多个父表继承,在这种情况下,它具有父表定义的列的合并。在子表定义中声明的任何列都会添加到这些列中。如果同一列名出现在多个父表中,或者出现在父表和子表的定义中,则这些列被“合并”,因此子表中只有一个这样的列。若要合并,列必须具有相同的数据类型,否则会引发错误。合并后的列将拥有来自它所来自的任何列定义的所有check约束的副本,如果其中任何一个列定义为null,则标记为null。

示例

代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE vehicle ( name text );
CREATE TABLE boat () INHERITS (vehicle);
CREATE TABLE car () INHERITS (vehicle);

--ewww,
CREATE TABLE boatcar () INHERITS (boat,car);
NOTICE:  merging multiple inherited definitions of column "name"

INSERT INTO boatcar (name) VALUES ('amphibious car');

TABLE boatcar ;
      name      
----------------
 amphibious car
(1 row)

TABLE boat;
      name      
----------------
 amphibious car
(1 row)

TABLE car;
      name      
----------------
 amphibious car
(1 row)

TABLE vehicle ;
      name      
----------------
 amphibious car
(1 row)
票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/150996

复制
相关文章

相似问题

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