왜이 테이블 관계로 "여러 개의 계단식 경로"를 얻고 있습니까?


0

내 데이터베이스에 다음 테이블 관계가 있습니다.

   Parent 
     / \ 
    Child1  Child2 
     \  /
     GrandChild 

부모 테이블의 삭제를 자식 및 손자 테이블에 모두 캐스케이드하도록 FK 관계를 만들려고합니다. 하나의 특별한 granchild에 대해, 그것은 하나 또는 다른 자식 테이블에 부모가 될 것이지만, 동시에 둘 다 결코 부모 테이블에 있지 않을 것입니다.

FK 관계에 ON DELETE CASCADE를 추가하려고 할 때, 모든 것이 두 자녀의 한 쪽 "측면"에 추가되는 것이 좋습니다 (Parent-Child1-GrandChild는 계단식 삭제에 적합합니다). 그러나 관계형의 Child2 "측면"에 계단식 삭제를 추가하자마자 SQL은 FK가 다중 계단식 경로를 야기한다고 알려줍니다. 여러 캐스케이드 경로는 하나 이상의 FK가 SAME 테이블을 나타낼 때만 적용된다는 인상하에있었습니다. 이 경우 다중 캐스케이드 경로 오류가 발생하는 이유는 무엇입니까?

추신 :이 시점에서 테이블 관계는 변경하기가 매우 어려워서 테이블 구조를 바꾸라고 말하면 도움이되지 않을 것입니다. 감사합니다.

4

부모 레코드를 삭제하면 삭제 가능한 GrandChild 레코드로 이어지는 경로가 두 개 있다는 것을 의미합니다.

수정 : FK에서 ON DELETE CASCADE 옵션을 제거하고 ChildX 테이블에 INSTEAD OF DELETE 트리거를 만들고 모든 손자 레코드를 삭제 한 다음 childX 레코드 자체를 삭제하십시오.