sql - 仅将表用于多重继承是一种不好的做法吗?

标签 sql postgresql inheritance postgresql-9.2 postgresql-8.4

为 PostgreSQL 数据库建模,创建一个表来为另一个表提供服务是否是一种不好的做法?例如,创建一个包含默认地址字段的表。

CREATE TABLE address (
    zipcode char(8) NOT NULL,
    street varchar(80) NOT NULL,
    number varchar(10) NOT NULL,
    city varchar(60) NOT NULL,
    state char(2) NOT NULL
);

然后在每个使用这些字段的表中继承它。示例:

CREATE TABLE customer (
    id integer PRIMARY KEY,
    name varchar(80)
) INHERITS (address);

CREATE TABLE company (
    id integer PRIMARY KEY,
    name varchar(80)
) INHERITS (address);

CREATE TABLE building (
    id integer PRIMARY KEY,
    name varchar(80)
) INHERITS (address);

这个想法是应用类似 Single responsibility principle 的东西在表创建过程中。

我的一个主要问题是表 address 是否会导致性能显着下降,因为它每次都会变大。

最佳答案

这不是个好主意。查询 address 表会显示一堆来自所有来源的困惑地址,但无法将它们有效地连接到任何其他内容。

通过对地址 ID 的外键引用,使用传统的关系模型可以更好地完成此操作。

另一种选择是将地址定义为复合类型并将其嵌入到每个表中。不过,您会发现许多客户端驱动程序不太喜欢复合类型,因此使用起来会很笨拙。

真的,在这里坚持使用简单的关系方法。

关于sql - 仅将表用于多重继承是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25608102/

相关文章:

mysql CONVERT_TZ 不一致的行为

postgresql - 使用比较运算符比较 postgres 中的字符串?

sql - 作用于 CTE 结果的 PostgreSQL 函数/ View ?

SQL Server : how to combine two select queries from the same table and take the result on Column

django - 内存数据库django中的Postgresql

java - Closeable 扩展了 AutoCloseable

c++ - 使用 using 关键字继承构造函数时的意外行为

c++为什么虚拟继承允许防止进一步继承?

sql - 如何在 PostgreSQL 中通过数组正确创建多个条目?

ruby-on-rails - rails/Postgres : Error after changing pg gem version