2012-11-26 4 views
0

데이터베이스에서 레코드를 삭제할 때 가장 좋은 방법은 무엇입니까?데이터베이스에서 레코드를 삭제할 때 가장 좋은 방법

예를 들어 온라인 예약 여행 신청서가있는 경우

제거 할 레코드가있는 둘러보기 테이블이 있지만 둘러보기 테이블은 예약 테이블 및 고객 테이블에도 연결됩니다. 이제는 기록을 삭제할 수 있어야하며, 보관소 등을 나타내는 깃발과 같은 필드가 있어야합니다.

모범 사례는 무엇인가요?

감사합니다. 차.

+1

귀하의 요구 사항에 따라 다릅니다. 아마도 간단한 ON DELETE CASCADE (또는 SET NULL)이 필요에 맞습니까? –

답변

1

Branko가 말한 것처럼 요구 사항 (및 데이터베이스 레이아웃)에 따라 다릅니다.

전체 기록을 유지하려면 많은 것을 삭제하지 않는 것이 좋습니다. 취소 된 플래그를 설정하는 것이 가장 좋을 것입니다.

귀하의 예제 데이터베이스 디자인에 관해서는 투어가 예약에 연결되어야한다고 말하고 싶지만 고객에게는 아닙니다 (예약은 고객에게 투어의 다 대다 맵핑을 제공해야 함).

예를 기반으로 여행을 예약 한 고객을 삭제할 수 없거나 예약을 삭제해야 할 수도 있습니다. 둘러보기가 삭제되면 해당 둘러보기의 모든 예약이 삭제되어야합니다 (고객 예약이 취소되었음을 고객에게 알리려면 예약 (또는 둘러보기) 삭제시 트리거가 필요할 수도 있고이 방아쇠를 데이터베이스).

위에서 볼 수 있듯이 구체적인 규칙은 없으므로 특정 데이터베이스 디자인에 허용되거나 허용되지 않아야하는 사항과 무언가가 삭제 될 때 발생할 필요가있는 사항을 논리적으로 생각해야합니다.

가장 안전한 설정 인 외래 키에 대한 기본값은 ON DELETE NO ACTION입니다. 특별히 설정의 각 인스턴스에 대해 생각하지 않고 해당 설정을 사용하는 것이 정당한 지 여부에 상관없이 ON DELETE CASCADE 또는 기본 설정이 아닌 다른 설정을 자유롭게 사용하면 안됩니다.

데이터베이스를 디자인 할 때 항상 누군가를 인수해야한다면 실수로 잘못된 것을 삭제하기가 어려울 것입니다.이 사람은 해당 데이터베이스를 사용하는 정확한 방법을 알지 못하기 때문입니다. 데이터베이스 (예 : 어떤 순서로 수행되어야하는지). 외래 키에 대한보다 엄격하거나 안전한 설정은 이러한 일이 더욱 힘들게 만듭니다.

관련 문제