PostgreSQL zero-or-one到zero-or-one的關系

正如標題所描述的,我想建立一種zero-or-one到zero-or-one的關系。例如,假設我們有兩個表Calls和Files。通話中可能會有一個附件,反之亦然。但我有一個限制。我希望如果我刪除一個調用,它的文件也會被刪除,但如果我刪除它的文件調用,它應該保持原樣。SQL約束(如ON DELETE CASCADE/ON DELETE SET NULL)是否可以這樣做?或者,是否有任何方法可以在不使用觸發器/事件的情況下,使用SQL在數據庫中實現這樣的行為?

我嘗試了以下內容:

-- Create the 'files' table
CREATE TABLE files (
    id SERIAL PRIMARY KEY,  -- Primary key for the 'files' table
    file_name TEXT NOT NULL -- Any additional fields for the 'files' table
);

-- Create the 'calls' table
CREATE TABLE calls (
    id SERIAL PRIMARY KEY,  -- Primary key for the 'calls' table
    file_id INT UNIQUE,     -- Foreign key referencing 'files' table (1-1 relationship)
    call_description TEXT,  -- Any additional fields for the 'calls' table
    CONSTRAINT fk_file_id FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE SET NULL
);

-- Add an additional constraint on the 'files' table to enforce the cascading behavior
ALTER TABLE files
ADD CONSTRAINT fk_call_file
FOREIGN KEY (id)
REFERENCES calls(file_id)
ON DELETE CASCADE;

但由于約束立即執行,因此它需要可推遲。而且,這也不是我的本意。我希望一個調用/文件存在,彼此之間沒有依賴關系。

在這種情況下,應該遵循哪些最佳實踐?

? 最佳回答:

我會選擇簡單的方法:

CREATE TABLE calls
(
    call_id SERIAL PRIMARY KEY
    /* other fields */
);

CREATE TABLE files
(
    file_id SERIAL PRIMARY KEY,
    call_id INT UNIQUE REFERENCES calls (call_id) ON DELETE CASCADE
    /* other fields */
);
主站蜘蛛池模板: 97精品国产一区二区三区| 日韩AV在线不卡一区二区三区 | 在线精品一区二区三区电影 | 成人h动漫精品一区二区无码| 国产精品一区在线麻豆| 91无码人妻精品一区二区三区L| 国产成人一区二区三区精品久久| 亚洲欧美日韩国产精品一区| 精品国产AⅤ一区二区三区4区| 亚洲av综合av一区二区三区| 中文字幕人妻丝袜乱一区三区| 一区二区免费电影| 无码一区二区三区中文字幕| 国产精品揄拍一区二区| 夜夜添无码试看一区二区三区| 国产精品亚洲综合一区在线观看| 无码中文字幕人妻在线一区二区三区| 久久人妻av一区二区软件| 国产一区二区女内射| 一区二区三区www| 日韩视频一区二区| 少妇人妻精品一区二区| 国产成人欧美一区二区三区| 亚洲AV香蕉一区区二区三区| 亚洲性无码一区二区三区| 精品国产一区AV天美传媒| 亚洲一区二区三区高清不卡 | 99国产精品欧美一区二区三区| 2018高清国产一区二区三区| 国产精品综合AV一区二区国产馆 | 国产激情一区二区三区在线观看| 亚洲av无码一区二区三区人妖 | 亚洲乱码日产一区三区| 波多野结衣中文一区| 日本香蕉一区二区三区| 无码毛片一区二区三区中文字幕| 亚洲一区二区三区在线视频| 久久毛片免费看一区二区三区| 中文字幕aⅴ人妻一区二区| 国产精品丝袜一区二区三区| 97久久精品一区二区三区 |