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)
);
관계가 작동하는 방식이 아닙니다. 수동으로해야 할 것입니다. 'delete delete cascade'는 예를 들어 작동합니다. 방을 제거 할 때 모든 해당 예약을 제거하십시오. – GurV
방을 제거 할 때 호텔 방의 예약이없는 경우에만 모든 해당 예약이 제거 될 수 있습니까? 당신의 응답을 주셔서 감사합니다. @GurV – 48502104
의견을 읽으십시오. 방을 제거 할 때 예약이없는 경우 해당 방의 모든 예약을 제거하십시오. 말이되지 않습니다. 또한, 기본 동작'NO ACTION'은 자식 행이있을 때 부모 행을 삭제하지 못하게합니다. 이것은 내가 원하는 것입니다. – GurV