我的PostgreSQL数据库中有几个表有几个常见的列。如果我将这些公共列移动到新表中并使表继承自这个新表,我认为这是一个好主意。例如:
create table foo_bar (
code varchar(9) primary key,
name varchar,
bar integer
);
重构后:
create table foo (
code varchar(9) primary key,
name varchar
);
create table foo_bar (
bar integer
) inherits (foo);
问题是,我在foo_bar
中有很多数据,以及很多参考此表的视图。
是否可以更改foo_bar
的定义以实现上述更改而不丢弃表中的数据?
答案 0 :(得分:2)
这可能是也可能不是一个好主意。数据库设计并不完全是面向对象的编程。有一些caveats。
继承功能的一个严重限制是索引 (包括唯一约束)和外键约束仅适用 单个表,而不是他们的继承子。这是真的 外键约束的引用和引用方。
此链接中描述的问题还有一些您需要注意的问题。
如果您真的想继续这样做,Laurenz Albe的回答中给出了如何更改表格。
答案 1 :(得分:1)
CREATE TABLE foo (
code varchar(9),
name varchar
);
ALTER TABLE foo_bar INHERIT foo;