2011-11-19 2 views
0

레코드 삭제시 가장 좋은 방법은 무엇입니까? 그리고 가장 적절한 옵션은 무엇입니까? 예를 들어sql 관련 레코드를 삭제 하시겠습니까?

상황이 따르고

:

테이블

---- 사용자 ----

INT usr_id

VARCHAR 이름

va rchar 성

부울 deleted_yn


--- subjects--

INT의 subject_id

VARCHAR 제목

부울 deleted_yn


--- subject_to_user ---

INT의 subject_to_user_id

INT usr_id

INT의 subject_id

부울


deleted_yn 그리고 사용자 나 주제를 삭제하려면 나는 관계를 삭제해야합니까 - subject_to_user?

내가 묻는 이유는 직장에서 사용자가 일부 정보를 삭제 한 다음 해당 데이터를 복구해야하기 때문입니다. 현재 관련 데이터를 삭제하지만 복구가 매우 어렵습니다.

삭제시 모범 사례가 무엇인지 묻고 싶습니다. 그리고 가장 적절한 옵션은 무엇입니까?

삭제 관련 데이터가 정확하다고 생각하지만 상황에 따라 다릅니다. 내가

답변

3

모범 사례는 false deleted_yn을/마킹 의미가 삭제

아무것도 삭제하지 않는 것입니다. 그냥

열을 추가 삭제 된 것으로 '에 isDeleted'항목을 플래그와 쿼리 대부분의 당신은 'WHERE에 isDeleted = False'로

+0

물론 그곳을 지우는 것 말입니다. marking - deleted_yn; 그래서 질문은 동일합니다. 삭제 관련 데이터가 필요합니까? – marechs

+0

특히 현재 많은 데이터 복구를 수행하는 경우. –

+1

DB의 구조에 따라 다릅니다 - 관련된 모든 데이터가 삭제되었거나 표시되지 않도록하려면 ... – Yacov

0

subject_to_user의 관련 데이터가 어떻게 관련되어 추가? ID가있어.

subject_to_user가 아닌 사용자 및 주제에서 삭제하는 경우, subject_to_user에 이미있는 ID로 새 사용자를 만들지 않는다는 것을 어떻게 알 수 있습니까?

아이디어는 모든 관련 데이터를 제거하는 것입니다. 복구가 필요한 경우에는 항상 deleted_user, deleted_subject 및 deleted_subject_to_user라는 또 다른 테이블 세트를 가질 수 있습니다. 기본 테이블에서 삭제할 때 바로 전에 이동하십시오.

+0

아이디어 : 접두어로 테이블에 데이터 이동 delete_ 어떤 의미를 지니고 있습니다. 이것을 염두에두고 다음을 시도하십시오. – marechs

+0

테이블을 두 번 필요합니다. – MPelletier

+0

이 방법을 사용하면 deleted_dt 필드를 추가하여 날짜/시간별로 쉽게 복원 할 수 있습니다. – phatfingers

0

우디 다한 (Udi Dahan, 내가 부끄러워하는 사람)은이 주제에 대한 훌륭한 블로그 게시물을 작성했습니다. 당신은 그것에 대해 here 읽을 수 있지만 요약은 실제 상황에서 일어나는 일을 미러링하는 것입니다.

예를 들어 현실 세계에서 주문은 '취소', '반품'되었지만 실제로는 삭제되지 않았습니다. 문맥은 매우 중요합니다.

관련 문제