2012-09-14 7 views
2

나중에 필요할 것이므로 테이블에서 레코드를 삭제하지 않는다고 들었습니다. 그리고 내가 테이블에서 행을 완전히 제거하는 것보다 행을 비울 수있는 DELETE보다 다른 대안이 있는지 알 수 있습니까?데이터베이스의 레코드를 삭제 하시겠습니까?

+9

달성하려는 목표는 무엇입니까? 항목을 "소프트 삭제"하는 일반적인 패턴은 테이블에 DateDeleted 열을 추가하는 것입니다 (삭제하지 않을 경우 NULL). 그런 다음이 열을 사용하여 삭제 된 항목을 필터링 할 수 있습니다. – ChaseMedallion

+0

@Chase 귀하의 의견은 대답 이었다면, 나는 그것을 upvote 것입니다. –

+0

[가능한 관계형 데이터베이스에서 행을 삭제하거나 비활성화해야합니까?] (http://stackoverflow.com/questions/347160/should-i-delete-or-disable-a-row-in-a-relational 데이터베이스) –

답변

9

당신은 당신의 테이블에 bit 열을 추가 할 수 있습니다 - 당신 INSERT 데이터는 데이터가 올바른 값으로 표시되어 있는지 확인하면 IsActive 또는

IsDeleted 같은 호출 : 그런 경우

New record - IsActive = true 
      - IsDeleted = false 

당신은 레코드를 사용할 수 없게 만들려면 UPDATE 레코드를 반대 방향으로 플래그를 지정하십시오 :

Update - IsActive = false 
     - IsDeleted = true 

쿼리를 실행하면이 플래그에 따라 데이터를 필터링합니다. 우리는이 유형의 소프트 삭제 우리의 시스템을 통해 구현하고 그것은 레코드를 숨기려고 작동합니다.

+0

대단히 감사합니다! 매우 유익한 – Sharpmind

1

우리는 bluefeet과 동일한 패턴을 사용하며 꽤 잘 작동합니다.

이것을 구현하는 데 도움이되는 몇 가지 지침이 있습니다.

bit 열이 null이 아닌지 확인하십시오. 논리적으로는 레코드가 삭제되었는지 여부를 모를 이유가 없으며 null에 대한 테스트를 걱정하지 않아도 쉽게 코딩 할 수 있습니다.

또한 bit 열의 기본값을 0으로 설정하면 삽입 문에서이 열을 참조 할 필요가 없습니다. 다시 논리적으로 삭제 된 레코드를 삽입하지 않으므로 레코드를 추가 할 때 값을 0으로 설정하는 것을 기억할 필요가 없습니다.

관련 문제