SO 上有很多 PostgreSQL 继承问题,但我想弄清楚我的具体情况。假设我有以下表格:
CREATE TABLE abstract_person (
id bigint PRIMARY KEY,
ver int NOT NULL,
code varchar NOT NULL,
id_country bigint NOT NULL,
...
);
CREATE TABLE abstract_person_phone (
id bigint PRIMARY KEY,
ver int NOT NULL,
phone varchar NOT NULL,
id_abstract_person bigint NOT NULL
);
CREATE TABLE individual (
first_name varchar NOT NULL,
last_name varchar NOT NULL,
...
CONSTRAINT individual_pkey PRIMARY KEY (id),
CONSTRAINT individual_id_country_fkey FOREIGN KEY (id_country) REFERENCES country (id),
CONSTRAINT individual_unique UNIQUE (code) DEFERRABLE INITIALLY DEFERRED
) INHERITS (abstract_person);
继承表会越来越多,individual
只是一个例子。 abstract_person
表不会永远 直接写入。我的以下假设是否正确:
子表不继承唯一性、主键和外键约束,但我通过直接在子表上声明这些约束来解决这个问题。
关于在
abstract_person
和abstract_person_phone
表之间实现引用完整性,我可以使用触发器来实现。我不能在父表上使用触发器,我必须将它附加到每个子表,但我可以使用单个触发器函数,如下所示:CREATE OR REPLACE FUNCTION person_deleted() RETURNS trigger AS $BODY$ BEGIN DELETE FROM abstract_person_phone WHERE id_abstract_person = OLD.id; RETURN OLD; END; $BODY$ LANGUAGE plpgsql; CREATE TRIGGER individual_deleted_trigger AFTER DELETE ON individual FOR EACH ROW EXECUTE PROCEDURE person_deleted();
最佳答案
是的,你完全正确。所有这些约束都不是 传播到子表。 至于触发器,你可以像你写的那样在子表上使用它们。并且您可以在父表上使用触发器,该触发器将决定应该将数据放在哪些子表中,以根据某些条件在 insert 查询(或在 select 上检索)条件
关于postgresql - PostgreSQL中的"Abstract"表(继承),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29366515/