2012-11-07 5 views
2

자식 테이블의 데이터를 유지하기 위해 부모 테이블에서 행을 삭제할 때 수행 할 작업입니다. 의미ON DELETE NO ACTION 제약 조건 SQL Server 데이터베이스

가 나는 두 개의 열을 가진 부모 테이블 인 테이블 부서가있는 경우 - depNodepName, 3 열이있는 자식 테이블 - emNo, emNamedepNo (FK)을.

부모 테이블의 행을 삭제할 수 있지만 내 테이블의 행을 유지할 수 싶습니다. (제 경우에는 라이센스와 연결되어 있으며 라이센스를 보유하고 있어도 추적하는 것이 좋습니다. 사용자는 이미 삭제됨).

부모 테이블의 행을 삭제하려고하면 오류가 발생하므로 ON DELETE NO ACTION이 작동하지 않습니다.

CASCADESET NULL은이 경우 좋지 않습니다.

SET Default - 기본값을 설정할 수 없기 때문에 작동하지 않습니다. - 다를 수 있으며 100 % 확실합니다.

아이디어를 만드는 방법은 무엇입니까?

+0

왜 하위 데이터를 보관해야합니까? 역사적인 테이블로 옮길 수 없습니까? – Oded

+1

아니요, 하위 테이블에 머물기 위해 데이터가 필요합니다. 정확하게 역사적인 테이블과 같습니다. 따라서 부모 테이블의 행을 삭제하면 자식 테이블의 FK가 유지됩니다. – Apostrofix

+1

그런 다음 자식 테이블에서 FK 제약 조건을 제거하고 일관성없는 데이터가 발생할 위험이 있습니다. 당신이 제안하는 것은 나쁜 데이터베이스 디자인입니다. 그런 식으로 자식 행을 다른 테이블로 옮겨야합니다. – Oded

답변

2

외래 키 열이 여전히 원래 값을 포함하는 상태로 유지하는 유일한 방법은 외래 키 제약 조건을 제거하여 일치하지 않는 데이터를 추가 할 위험이 있습니다.

외래 키 제약 조건없이 새 테이블을 만들고 삭제하기 전에 하위 행을 복사하는 것이 좋습니다.

관련 문제