사이의 외래 키 제약은, 내가 3 개 테이블이 있다고 가정 DB2 : T1, T2, T3 : 여러 테이블
CREATE TABLE T1 (
T1_ID INTEGER NOT NULL,
PRIMARY KEY (ID)
);
CREATE TABLE T2 (
T2_T1 INTEGER NOT NULL, -- parent entity ID from T1
T2_ID INTEGER NOT NULL,
PRIMARY KEY (T2_T1, T2_ID),
);
CREATE TABLE T3 (
T3_T1 INTEGER NOT NULL, -- parent entity ID from T1
T3_T2 INTEGER NOT NULL, -- parent entity ID from T2
T3_ID INTEGER NOT NULL,
PRIMARY KEY (T3_T1, T3_T2, T3_ID)
);
나는 그것이 기록의 삭제를 금지 할 수있는 방법에 FK 관계를 정의하고 싶습니다 T2에서 연결된 레코드가 T3에 있지만 동시에 T1에서 레코드를 삭제하면 T2와 T3의 레코드가 자동으로 삭제됩니다.
이러한 요구 사항을 충족시키기 위해 FK 제약 조건 만 정의 할 수 있습니까? 또는 T3에서 적절한 레코드 레코드를 먼저 삭제 한 다음 T2에서 T1 이후의 레코드 만 삭제하는 코드를 작성하지 않아도됩니다.
업데이트 : 나는 실행하기 위해 노력하고있어 실제 DB2 10.5 코드 :
CREATE TABLE t1 (
t1_id INTEGER NOT NULL,
PRIMARY KEY(t1_id)
)
CREATE TABLE t2 (
t2_t1 INTEGER NOT NULL,
t2_id INTEGER NOT NULL,
PRIMARY KEY (t2_t1, t2_id),
CONSTRAINT t2_fk_t1
FOREIGN KEY (t2_t1)
REFERENCES t1 (t1_id)
ON DELETE CASCADE
)
CREATE TABLE t3 (
t3_t1 INTEGER NOT NULL,
t3_t2 INTEGER NOT NULL,
t3_id INTEGER NOT NULL,
PRIMARY KEY (t3_t1, t3_t2, t3_id),
CONSTRAINT t3_fk_t1
FOREIGN KEY (t3_t1)
REFERENCES t1 (t1_id)
ON DELETE CASCADE,
CONSTRAINT t3_fk_t2
FOREIGN KEY (t3_t1, t3_t2)
REFERENCES t2 (t2_t1, t2_id)
ON DELETE RESTRICT
)
마지막 CREATE
문은 다음과 같은 오류와 함께 실패는 :
SQL20255N FOREIGN KEY "T3_FK_T2" is not valid because it would cause a descendent table "S.T3" to be delete-connected to its ancestor table "S.T1" through multiple relationships with conflicting delete rules. The conflict is between the delete rules of constraints "S.T3.T3_FK_T1" and "S.T3.T3_FK_T2" on the descendent table. Reason code = "3". SQLSTATE=42915
네, 가능할 수 있습니다 ***** 경고 ***** FK 캐스케이드가 잘못된 경우 DB에 심각한 캐스케이드 오류가 발생하고 행이 부모 및 자식 테이블에서 모두 삭제됩니다. 이를 수행하는 안전한 방법은 restrict를 지정하는 것입니다. 외래 키로 각 테이블의 레코드를 수동으로 훨씬 더 안전하게 삭제해야합니다. ***** 그림 그리기 시작 ****** – danny117