簡體   English   中英

如何使用Postgres添加指向2個表之一的外鍵?

[英]How to add foreign key that points to one of 2 tables with Postgres?

我想添加一個外鍵,用於檢查記錄或個人記錄表之一中是否存在活動的記錄 ID。 可以用 Postgres 做嗎?

CREATE TABLE record
(
    id BIGSERIAL PRIMARY KEY
);

CREATE TABLE personal_record
(
    id BIGSERIAL PRIMARY KEY
);

CREATE TABLE activity
(
    id        BIGSERIAL PRIMARY KEY,
    record_id BIGINT NOT NULL,
    CONSTRAINT record_fk FOREIGN KEY (record_id) REFERENCES record (id)
);

如前所述,這是不可能的。 一種可能性是生成的列和可為空的引用:

CREATE TABLE activity (
    id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    private_record_id BIGINT,
    private_personal_record_id BIGINT,
    record_id BIGINT GENERATED ALWAYS AS (COLAESCE(private_record_id, private_personal_record_id)),
    CHECK( (private_record_id IS NOT NULL AND private_personal_record_id IS NULL) OR
           (private_record_id IS NULL AND private_personal_record_id IS NOT NULL)
         ),           
    CONSTRAINT fk_activity_record_id FOREIGN KEY (private_record_id) REFERENCES record(id),
    CONSTRAINT fk_activity_record_id FOREIGN KEY (private_personal_record_id) REFERENCES personal_record(id),
);

您可能還想研究繼承。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM