为 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/