0
ホテルの予約と顧客に関する情報を保存するための小さなデータベースを作成しています。子レコードが存在しない場合、親レコードを削除するCONSTRAINT PostgreSQL
ホテルルームの予約がない場合に限り、ルームテーブルのルームレコードを削除できるようにしたいと考えています。
FOREIGN KEY (hid, room) REFERENCES room (hid, num)
ON DELETE CASCADE WHEN NOT EXISTS(hid AND room)
が、それは動作していない:
私は問題を解決しようとしている方法が行うことです。
誰かが私が間違っていることを知っていますか、どのように修正できますか?
CREATE TABLE booking(hid CHAR(4) NOT NULL,
cid CHAR(4) NOT NULL,
dstart DATE NOT NULL,
ndays DATE,
room INTEGER,
PRIMARY KEY(hid, cid, dstart),
FOREIGN KEY (cid) REFERENCES customer (cid)
ON UPDATE CASCADE
ON DELETE CASCADE,
FOREIGN KEY (hid, room) REFERENCES room (hid, num)
ON DELETE CASCADE WHEN NOT EXISTS(hid AND room)
);
これは関係の仕組みではありません。それを手動で行う必要があります。 'on delete cascade'は、例えば次のように動作します。部屋を削除するときは、対応するすべての予約を削除します。 – GurV
部屋を削除すると、ホテルルームの予約がない場合にのみ、対応するすべての予約が削除されますか?ご回答いただきありがとうございます。 @GurV – 48502104
あなたのコメントをお試しください。あなたは部屋を取り除くときに、その部屋の予約がないときにその部屋のすべての予約を取り除くと言っています。意味がありません。また、デフォルト動作 'NO ACTION'では子が存在するときに親行が削除されることはありません。これはあなたが望むものです。 – GurV