在PostgreSQL中使用继承

Ant*_*iev 9 postgresql inheritance

对于在PostgreSQL中使用继承经验的人:是否值得使用它,或者最好不要使用它?你会在哪种情况下使用它?

说实话,我不完全理解关系模型和OO模型之间的区别......

int*_*tgr 5

可能不是,PostgreSQL表继承有一些警告,比如没有全局唯一约束,所以你失去了许多一致性保证.编写性能良好的查询也是一项挑战.正如Scott所指出的那样,PostgreSQL继承只对表分区非常有用,它首先是性能权衡.

有两种常用方法可以使用标准SQL习惯用于类继承:

  • 每个对象在超类表中都有一个单独的行,子类对象在子类特定的表中也有一个行,它通过外键引用引用超类字段.
  • 只需将所有超类和子类字段放在一个大表中,并将它们保留为NULL,其值不适用.这在PostgreSQL中特别有效,因为NULL值每行只消耗1位,并且向现有表添加/删除字段的速度非常快(无论数据量多少).您可以编写一个触发器来验证是否存在特定类型类的必需字段.


Sco*_*ley 2

它很好,但在使用它之前请确保您了解手册中概述的注意事项。目前它处理约束的方式有点粗糙,但它在待办事项列表中。它对于分区特别有用。一个更加面向对象的示例是从 people 表继承来创建员工表。

当然,缺点是它不能移植到任何其他 RDBMS,因此如果您必须在另一个 RDBMS 上重新托管数据库,您就必须重写一堆东西。