为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是否会因为每次都变大而导致性能显著下降。

最佳答案

如果打算复制表布局,基本思想是好的,但是inheritance是一个误解。
从另一个表复制表模式的想法是合理的(如果您真的需要一个副本)。但是使用

CREATE TABLE new_table (LIKE template_table);

或者
CREATE TABLE new_table (LIKE template_table INCLUDING ALL);

这是basicCREATE TABLE语句的一个不同的内置特性。复制模式(包含或不包含选定的详细信息),但结果是一个独立的表。
在最近的相关回答中有更多细节:
Merging two tables into one with the same column names
您还可以添加类似于继承示例中的列:
CREATE TABLE new_table (LIKE template_table INCLUDING ALL, name text);

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

10-11 08:34