0
SO上有很多PostgreSQL繼承問題,但我想澄清一下我的具體情況。假設我有如下表:PostgreSQL中的「Abstract」表(繼承)
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();