2010-02-06 2 views
0

다음과 유사한 테이블 구조가 있습니다.SQL에서 "트리"데이터를 삭제하는 방법?

Portfolios 
    Properties 
    Units 
    Leases 

모든 테이블은 외래 키 관계와 계단식 삭제로 설정됩니다. 포트폴리오를 삭제하면 해당 포트폴리오에 할당 된 모든 속성, 해당 속성에 할당 된 모든 단위 및 해당 단위에 할당 된 모든 임대가 차례로 삭제됩니다.

비슷한 오류가 발생합니다 :

The DELETE statement conflicted with the REFERENCE constraint "FK_Leases_Units". The conflict occurred in database "MyDb", table "Leases", column 'UnitId'. 

이 같은 "트리"데이터를 삭제하는 적절한 방법은 무엇입니까?

중요한 경우 MS SQL Server 2008을 사용하고 있습니다.

+1

CASCADE DELETE가 설정되어 있습니까? 그것은 일하기위한 것입니다. –

+2

유닛을 둘 이상의리스와 연관시킬 수 있습니까? 아니면 하나 이상의 유닛과 관련이 있습니까? –

+0

@ 존 예,이 경우 단위당 복수 임대가있을 수 있습니다. –

답변

1

당신은 FK_Leases_Units 삭제 계단식하도록 설정이되어 있는지 확인 있습니까? 나무에있는 모든 FK는 계단식 삭제 또는 작동하지 않는 설정이어야합니다 ... 최저 수준이 이렇게 설정되어 있지 않은 것처럼 보입니다.

계단식으로 설정하면이 오류를 다시 확인해야합니다. 오류가 발생하면 안됩니다 ... 부모가 누락되었다고 불평하는 대신 해당 UnitId가있는 모든 행이 삭제됩니다.

+0

내가 가지고있는 테이블 디자인은 좀 더 복잡하고 전통적인 트리에 맞지 않습니다. 하지만 최상위 항목이 삭제되면 모든 항목이 삭제되도록 계단식을 디자인했습니다. 어쩌면 나는 돌아가서 계곡을 확인할 필요가있을 것입니다. 슬픔을 유발할 수있는 디자인의 "맵"테이블이 있습니다. –

-1

올바른 순서로 레코드를 삭제해야합니다. 다른 테이블의 다른 레코드에 대한 키인 레코드는 삭제할 수 없습니다. 삭제 명령을 확인하면 문제를 찾을 수 있습니다.

+0

아니요, CASCADE DELETE의 핵심입니다. 그것은 당신이 레코드 하나 하나를 직접 삭제할 필요없이 당신을 찾는 모든 것을해야한다는 것을 의미합니다. –