为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);
这是basic
CREATE 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/