복붙노트

[SQL] 물리 대 논리 / 소프트 데이터베이스 레코드의 삭제 하시겠습니까?

SQL

물리 대 논리 / 소프트 데이터베이스 레코드의 삭제 하시겠습니까?

수행의 장점은 무엇입니까 논리적 / 기록 실제로 또는 물리적으로 기록 삭제에 반대 (즉 플래그 레코드가 삭제한다는 설정)의 삭제 소프트?

이 관행인가?

이 안전한가?

해결법

  1. ==============================

    1.장점은 삭제 된 행을 참조하는 데이터베이스의 여러 다른 테이블을 통해 삭제를 계단식에 대한 걱정에 당신이 (감사 좋은) 기록을 유지하고 당신이하지 않는 것이 있습니다. 단점은 계정에 깃발을 어떤보고 / 디스플레이 방법을 코딩해야한다는 것입니다.

    장점은 삭제 된 행을 참조하는 데이터베이스의 여러 다른 테이블을 통해 삭제를 계단식에 대한 걱정에 당신이 (감사 좋은) 기록을 유지하고 당신이하지 않는 것이 있습니다. 단점은 계정에 깃발을 어떤보고 / 디스플레이 방법을 코딩해야한다는 것입니다.

    지금까지이 일반적인 관행 인 것처럼 - 내가 네 말을하지만, 아무것도 당신은 당신의 비즈니스 요구 사항에 따라 사용 여부를 지정합니다.

    편집 : 다른 disadvantange의 생각은 - 당신이 테이블에 고유 인덱스가있는 경우도 그 가능성 주위 코드 그래서, 삭제 된 레코드는 여전히 "한"기록을 차지하게됩니다 (예를 들어, 고유 인덱스에 대한 권한이있는 사용자 테이블 사용자 이름;. A는 기록이 여전히 삭제 된 사용자가 새로운 기록을 위해 username을 작업을이 문제를 해결 삭제 된 사용자 이름 컬럼에 GUID에 압정 수 차단할 것입니다 삭제하지만 내가 추천하지 않을 것이라고 매우 해키 해결의 아마 것 그 상황에서. 단지 사용자 이름이 사용되면, 교체되지 않을 수있는 규칙이 더 나은합니다.)

  2. ==============================

    2.논리적 인 삭제는 일반적인 방법이 있습니까? 그래, 난 많은 장소에서 이것을 보았다. 그들은 확보하고 있는가? 정말 따라 그들이 어떤 덜 다음 데이터는 당신이 그것을 삭제 된 보안 전에입니까?

    논리적 인 삭제는 일반적인 방법이 있습니까? 그래, 난 많은 장소에서 이것을 보았다. 그들은 확보하고 있는가? 정말 따라 그들이 어떤 덜 다음 데이터는 당신이 그것을 삭제 된 보안 전에입니까?

    나는 기술 리드가 때, 나는 우리 팀이 데이터의 모든 조각을 유지하는 것이 요구, 나는 시간에 우리가 알고있는 것은 아니지만 우리는 데이터가 다양한 BI 애플리케이션을 구축 할 것을 모두 사용이 될 것이라고시에 알고있는 것을 요구 것 있다. 이 (이것은 B2B 거래를위한 전자 상거래 / 도구 사이트, 그리고 사람이 도구를 사용하는 경우, 우리는 자신의 계정이 나중에 해제 된 경우에도 그것을 기록하고 싶었) 감사, 문제 해결 및보고의 관점에서 좋은 동안, 그것은 몇 가지 단점을 가지고 않았다.

    단점은 (이미 언급 등을 포함하지 않음)을 포함한다 :

    논리적, 물리적 삭제를 사용하기로 결정, 또는 보관 할 때 나는이 질문을 자신에게 물어 것입니다 :

  3. ==============================

    3.그것은 조금 늦게 될 수도 있지만 약 PINAL 데이브의 블로그 게시물을 확인하는 모든 사람을 제안 논리 / 소프트 삭제 :

    그것은 조금 늦게 될 수도 있지만 약 PINAL 데이브의 블로그 게시물을 확인하는 모든 사람을 제안 논리 / 소프트 삭제 :

  4. ==============================

    4.나는 NoSQL에 개발자 해요, 내 마지막 직장에서, 나는 항상 누군가를 위해 중요했다 데이터와 함께 일했으며,이 생성 된 같은 날에 실수로 삭제 된 경우, 나는 마지막 백업에서 찾을 수 없었다 어제! 그 상황에서 소프트 삭제는 항상 일 저장.

    나는 NoSQL에 개발자 해요, 내 마지막 직장에서, 나는 항상 누군가를 위해 중요했다 데이터와 함께 일했으며,이 생성 된 같은 날에 실수로 삭제 된 경우, 나는 마지막 백업에서 찾을 수 없었다 어제! 그 상황에서 소프트 삭제는 항상 일 저장.

    나는 소프트 삭제 문서가 삭제 된 날짜를 등록, 타임 스탬프를 사용했다 :

    IsDeleted = 20150310  //yyyyMMdd
    

    매주 일요일은, 프로세스는 데이터베이스에 걸어와 isDeleted를 필드를 확인했습니다. 현재 날짜와 타임 스탬프의 차이가 N 일보다 큰 경우, 문서를 하드 삭제되었습니다. 문서가 여전히 백업에 사용할 수 고려할 때 그것을 할 안전했다.

    편집 :이 NoSQL에 사용하는 경우는 큰 데이터베이스, 수십에서 만든 문서 또는 그 수백 매일,하지만 수천 또는 수백만에 관한 것입니다. 일반적으로 그들은 상태, 데이터 및 워크 플로우 프로세스의 첨부 문서했다. 즉 사용자의 가능성은 중요한 문서를 삭제 있었다 이유였다. 이 사용자는 몇 가지 이름을, 관리자 권한, 아니면 문서의 소유자와 사람이 될 수 있습니다.

    TL; DR 내 유스 케이스는 빅 데이터가 아니었다. 이 경우, 당신은 다른 접근 방식이 필요합니다.

  5. ==============================

    5.내가 사용하고 하나 개의 패턴은 모두 삭제 (원하는 경우 업데이트가) 미러 테이블에 기록되도록, 미러 테이블을 생성하고 기본 테이블에 트리거를 첨부하는 것입니다.

    내가 사용하고 하나 개의 패턴은 모두 삭제 (원하는 경우 업데이트가) 미러 테이블에 기록되도록, 미러 테이블을 생성하고 기본 테이블에 트리거를 첨부하는 것입니다.

    이것은 "재구성"에 당신을 수 있습니다 / 변경 기록을 삭제하고, 당신은 여전히 ​​하드 기본 테이블에서 삭제하고 "깨끗한"유지할 수 있습니다 - 그것은 또한 "실행 취소"기능의 생성을 허용하고, 당신은 또한 날짜, 시간을 기록 할 수 있습니다 그리고 거울 테이블에서 작업을 한 사용자 (마녀 사냥 상황에서 매우 중요한).

    또 다른 장점은 당신이 의도적으로 거울 테이블에서 레코드를 포함하는 문제로 이동하지 않는 한 기본 떨어져 쿼리 할 때 실수로 삭제 된 레코드를 포함 기회 (라이브 및 삭제 된 레코드를 표시 할 수 있습니다)이 없도록이다.

    또 다른 이점은 실제 외래 키 참조가 없어야로 미러 테이블 독립적 기본 테이블의 퍼지와 비교하여 이것을을 비교적 간단한 조작을, 제거 할 수 있다는 것을 사용 소프트 삭제 여전히 다른 테이블을 참조 연결을 갖는다.

    어떤 다른 장점? - 당신이하고, 프로젝트 작업 코더의 무리가 있다면 훌륭한 세부 수준으로 혼합 기술과 관심으로 데이터베이스에 읽고, 당신은 그들 중 하나가 삭제 포함하지 않도록 잊지 않았다 바라고 밤을 머물 필요가 없습니다 기록 (LOL, 삭제 된 기록 = TRUE를 포함하지 않음), 어떤 당신이 거래 시스템과 작업 할 때, 당신을들은 후 (무역 시스템으로, 즉) 일부 주식을 구입 가서 클라이언트 가능한 현금 위치를 말할 과장 같은 것들의 결과 그들은 약간 "오버 헤드"더 초기 비트 수있다하더라도 매우 신속하게 강력한 솔루션의 가치를 찾을 수 있습니다.

    예외 : - 참조와 같은 "점"형태의 데이터, 즉, 거래 내역에 대한 미러 테이블 등 사용자 카테고리, 하드 삭제 등의 "참조"소프트 데이터 삭제를 사용한다.

  6. ==============================

    6.나는 일반적으로 논리적 삭제를 사용 - 난 당신이 또한 간헐적 따라서 응용 프로그램의 성능에 영향을 미치는 기회가없는 (필요한 경우 검색 할 수 있습니다) 보관 된 테이블에 '삭제'데이터를 보관할 때 잘 작동 찾을 수 있습니다.

    나는 일반적으로 논리적 삭제를 사용 - 난 당신이 또한 간헐적 따라서 응용 프로그램의 성능에 영향을 미치는 기회가없는 (필요한 경우 검색 할 수 있습니다) 보관 된 테이블에 '삭제'데이터를 보관할 때 잘 작동 찾을 수 있습니다.

    만약 당신이 감사하는 경우 여전히 데이터를 가지고 있기 때문에 그것은 잘 작동합니다. 당신이 물리적으로 삭제하면 사라 졌어요!

  7. ==============================

    7.나는 특히 비즈니스 애플리케이션의 선에 대해 논리적 삭제의 큰 팬이에요, 또는 사용자 계정의 컨텍스트한다. 내 이유는 간단하다 : 종종 나는 사용자가 우리가 사용자를 삭제 한 경우 (계정 GET의 삭제로 표시가 있으므로), 그러나, 우리는 그들의 작업 등을 모두 잃을 것 더 이상 시스템을 사용할 수 있도록 싶지 않아요.

    나는 특히 비즈니스 애플리케이션의 선에 대해 논리적 삭제의 큰 팬이에요, 또는 사용자 계정의 컨텍스트한다. 내 이유는 간단하다 : 종종 나는 사용자가 우리가 사용자를 삭제 한 경우 (계정 GET의 삭제로 표시가 있으므로), 그러나, 우리는 그들의 작업 등을 모두 잃을 것 더 이상 시스템을 사용할 수 있도록 싶지 않아요.

    또 다른 일반적인 시나리오는 사용자가 삭제 된 후 다시 생성 잠시를 얻을 수 있다는 것입니다. 그것은을 만들 다시 사용자들이 삭제되기 전에 그것이 모든 데이터 존재가 아니라해야 할에 대한 훨씬 더 좋은 경험입니다.

    나는 보통 무기한를 "중단"으로 더 많은 사용자를 삭제하는 생각. 그들이 합법적으로 돌아올해야 할 때 당신은 절대 모릅니다.

  8. ==============================

    8.나는 거의 항상 부드러운 왜 여기 삭제 :

    나는 거의 항상 부드러운 왜 여기 삭제 :

  9. ==============================

    9.재 : "이 안전한가요?" - 그게 당신이 무엇을 의미하는지에 따라 달라집니다.

    재 : "이 안전한가요?" - 그게 당신이 무엇을 의미하는지에 따라 달라집니다.

    당신이 삭제 물리적 수행하여, 혹시 삭제 된 데이터를 발견하지 못하도록합니다 것을 의미한다면, 예, 그것은 어느 정도 사실이다; 당신은 그 의미하기 때문에 영구적으로 데이터베이스에서 사라 졌어요, 물리적 요구가 삭제되는 것을 민감한 데이터를 삭제의 안전입니다. (단, 실현 다른 같은 백업에서와 같이 문제가되는 데이터의 사본, 또는 트랜잭션 로그, 또는 운송에서 기록 된 버전이있을 수 있음을, 예를 들어, 패킷 스니퍼 - 데이터베이스하지 않는에서 그냥 삭제하기 때문에 보장은 다른 곳에 저장되지 않았습니다.)

    당신이 논리적 삭제를 수행하여, 데이터가 있음을 의미하는 경우도 사실 모든 데이터를 잃지 않을 것이기 때문에 더 안전합니다. 이 감사 시나리오에 대한 좋은; 나는 데이터가 생성되면, 정말 (그것도 말하자면, 인터넷 검색 엔진에 의해 캐시되는 능력을 가지고 특히 경우) 멀리 가지 않을거야 기본적인 사실을 인정하기 때문에이 방법을 설계하는 경향이있다. 물론, 진정한 감사의 시나리오뿐만 아니라 논리적 인 삭제가 있지만 그 업데이트가 변화의 시간과 변경 한 배우와 함께 기록되어 있어야합니다.

    당신은 데이터가 애플리케이션 및 보안 구조의 것을 완전히 위로 다음, 그것을보고 안하는 사람의 손에 빠지지 것을 의미합니다. 그런 점에서, 삭제의 논리는 더 이상 또는 덜 안전한 데이터베이스에서 무엇보다도 없습니다.

  10. ==============================

    10.당신은 많은 오류에 노출되어 있기 때문에 난 강력하게 논리적 인 삭제에 동의하지 않는다.

    당신은 많은 오류에 노출되어 있기 때문에 난 강력하게 논리적 인 삭제에 동의하지 않는다.

    우선 쿼리의 각 쿼리는 isDeleted를 필드에 관심을 가지고해야하며, 오류의 가능성이 복잡한 쿼리와 높아진다.

    두 번째 성능 :와 100000 RECS있는 테이블을 상상 만 3 활성화, 이제 다중 데이터베이스의 테이블이 번호; 다른 성능 문제는 오래된 (삭제 된 레코드)와 새 레코드와 충돌 가능성이다.

    유일한 당신이 정보를 저장할 수있는 로그 테이블을 만들 수 있습니다 예를 들어, 내가 기록의 역사는 볼 수 있지만,이 결과를 달성하기 위해 다른 방법이있다 이점 : TABLENAME, OldValues, NewValues, 날짜, 사용자, [...] 여기서 * 값은 VARCHAR를하고이 양식의 필드 이름에서 세부 사항을 작성할 수 있습니다 값을; [...] 또는 XML과 같은 정보를 저장한다.

    이 모든 코드 또는 트리거를 통해 달성 할 수 있지만 모든 역사를 가진 하나 개의 테이블입니다. 또 다른 옵션은 지정된 데이터베이스 엔진은 SQL 추적 데이터 변경이있는 SQL Server 데이터베이스에 예를 들어, 변경 추적에 대한 기본 지원 있는지 확인하는 것입니다.

  11. ==============================

    11.난 그냥 오래된 기록을 보관, 소프트 삭제하는 데 사용됩니다. 나는 사용자가 생각 종종 오래된 레코드를 볼 귀찮게하지 않는다는 것을 깨달았다. 사용자가 기존 기록을 보려는 경우, 그들은 바로, 아카이브 또는 감사 테이블에서 볼 수 있습니까? 그래서, 소프트 삭제의 장점은 무엇인가? 더 복잡한 쿼리 문 등으로 그것은 단지 리드

    난 그냥 오래된 기록을 보관, 소프트 삭제하는 데 사용됩니다. 나는 사용자가 생각 종종 오래된 레코드를 볼 귀찮게하지 않는다는 것을 깨달았다. 사용자가 기존 기록을 보려는 경우, 그들은 바로, 아카이브 또는 감사 테이블에서 볼 수 있습니까? 그래서, 소프트 삭제의 장점은 무엇인가? 더 복잡한 쿼리 문 등으로 그것은 단지 리드

    난 더 이상 부드러운되지-삭제하기로 결정하기 전에 다음은, 내가 구현 한 것들입니다 :

    그냥 내 두 센트 의견.

  12. ==============================

    12.논리 삭제하면 참조 무결성에 어렵다.

    논리 삭제하면 참조 무결성에 어렵다.

    그것은 바로 테이블 데이터의 시간적 측면이있을 때 할 생각입니다 (- TO_DATE 유효 FROM_DATE이다).

    그렇지 않으면 감사 테이블에 데이터를 이동하고 기록을 삭제합니다.

    긍정적 인 측면에서는:

    그것은 (모든 가능의 경우) 롤백 할 수있는 쉬운 방법입니다.

    국가가 특정 시점에서 무엇인지 쉽게 알 수 있습니다.

  13. ==============================

    13.그것은 (@ 존 Dewees 언급으로, 예를 들어 사용자가 계정) 당신이 뭔가의 역사를 유지하고 싶은 경우에 매우 표준입니다. 유엔 삭제 요청 사용자의 강한 기회가 있다면 그것은 확실히 좋은 생각입니다.

    그것은 (@ 존 Dewees 언급으로, 예를 들어 사용자가 계정) 당신이 뭔가의 역사를 유지하고 싶은 경우에 매우 표준입니다. 유엔 삭제 요청 사용자의 강한 기회가 있다면 그것은 확실히 좋은 생각입니다.

    당신이 쿼리를 쿼리에서 삭제 된 레코드를 필터링 지저분한을 받고 그냥 복잡의 논리에 대해 우려하는 경우, 당신은 단지에 대한 당신과 사용하는 쿼리에 대한 필터링을 할 뷰를 구축 할 수 있습니다. 이 솔루션 등을보고 이러한 기록의 누출을 방지 할 수 있습니다.

  14. ==============================

    14.대답 할 필요가 시스템 설계 넘어 가지 요구 사항이 있습니다. 기록 보존의 법적인 요구 사항은 무엇입니까? 행이 관련된 내용에 따라서는 '중단'된 후에 데이터가 일정 시간 동안 유지하는 것이 법적 요구 사항이있을 수 있습니다.

    대답 할 필요가 시스템 설계 넘어 가지 요구 사항이 있습니다. 기록 보존의 법적인 요구 사항은 무엇입니까? 행이 관련된 내용에 따라서는 '중단'된 후에 데이터가 일정 시간 동안 유지하는 것이 법적 요구 사항이있을 수 있습니다.

    한편, 요구 사항은 기록이되면, '삭제'가 진정으로하고 돌이킬 삭제됩니다 수 있습니다. 당신이 결정을하기 전에 이해 관계자에게 문의하십시오.

  15. ==============================

    15.레코드가 (로 표시) 된 것을 클라이언트에 표시 할 수 있어야합니다 서버 삭제와 기록이 물리적으로 삭제 된 경우이 가능하지 않을 수도 있습니다 : 동기화에 따라 모바일 앱은 논리적이 아닌 실제 h의 사용을 부과 할 수 있습니다.

    레코드가 (로 표시) 된 것을 클라이언트에 표시 할 수 있어야합니다 서버 삭제와 기록이 물리적으로 삭제 된 경우이 가능하지 않을 수도 있습니다 : 동기화에 따라 모바일 앱은 논리적이 아닌 실제 h의 사용을 부과 할 수 있습니다.

  16. ==============================

    16.그들은 그것이 쓸모 캐스케이드 기능과 같은 사항을 렌더링해야으로 데이터베이스가 수행 할 수 없습니다.

    그들은 그것이 쓸모 캐스케이드 기능과 같은 사항을 렌더링해야으로 데이터베이스가 수행 할 수 없습니다.

    재 삽입의 경우 같은 삽입과 같은 간단한 것들 들어, 다음 뒤에 코드가 배가됩니다.

    당신은 단지 삽입, 대신 당신은 존재를 확인하고 존재하지 않는 경우 이전에 삽입하거나 또한 새로운 값으로 다른 모든 열을 업데이트하는 동안 않는 경우 삭제 플래그를 업데이트 할 수 없습니다. 이 작업은 데이터베이스 트랜잭션 로그에 대한 업데이트 및 부정확 한 감사 로그를 일으키는 삽입하지 신선한로 볼 수 있습니다.

    테이블이 중복 된 데이터로 막혀지고 있기 때문에 그들은 성능 문제가 발생할. 그것은 고유성과 특히 색인과 혼란을한다.

    나는 논리적 삭제의 큰 팬이 아니에요.

  17. ==============================

    17.자히드의 의견에 응답하기 위해, 우리는 우리가 기록의 역사를 유지하고 싶어하고 또한 우리가 우리가으로 isDeleted 열을 원하거나인지 확실하지 않았다 같은 문제에 직면했다.

    자히드의 의견에 응답하기 위해, 우리는 우리가 기록의 역사를 유지하고 싶어하고 또한 우리가 우리가으로 isDeleted 열을 원하거나인지 확실하지 않았다 같은 문제에 직면했다.

    나는 우리의 파이썬 구현과 우리가 히트 유사한 사용 사례에 대해 이야기하고있다.

    우리는 당신의 해당 테이블에 대한 테이블을 버전 얻을 수있는 가장 쉬운 방법이다 https://github.com/kvesteri/sqlalchemy-continuum가 발생했습니다. 추가, 삭제 및 업데이트에 대한 코드 및 캡처 역사의 최소 라인.

    이 개 단지 is_deleted 열 이상의 역할을한다. 당신은 항상이 항목에 무슨 일이 있었는지 확인하기 위해 버전 테이블을 역 참조 할 수 있습니다. 여부 항목이 삭제 업데이트되거나 추가되었다.

    우리가 필요로하지 않은이 방법은 전혀 열을 is_deleted 한하고 우리의 삭제 기능은 아주 사소한이었다. 우리는 또한 기억하지 않아도이 방법은 우리의 API의 어떤에서 거짓 = is_deleted 표시하는.

  18. ==============================

    18.소프트 데이터 삭제가 더 관련이 때 응용 프로그램의 대부분에서 준수되고있는 프로그래밍 습관이다. 최종 사용자의 실수로 삭제가 치명적일 수 금융 응용 프로그램의 경우를 생각해 보자. 소프트 삭제 관련 될 때 그 경우입니다. 소프트 사용자가 실제로 (일반 규칙에 따라) 대신 존재가 참으로 isDeleted를 플래그가 기록에서 데이터를 삭제하지 않습니다 삭제합니다.

    소프트 데이터 삭제가 더 관련이 때 응용 프로그램의 대부분에서 준수되고있는 프로그래밍 습관이다. 최종 사용자의 실수로 삭제가 치명적일 수 금융 응용 프로그램의 경우를 생각해 보자. 소프트 삭제 관련 될 때 그 경우입니다. 소프트 사용자가 실제로 (일반 규칙에 따라) 대신 존재가 참으로 isDeleted를 플래그가 기록에서 데이터를 삭제하지 않습니다 삭제합니다.

    EF 6.x 또는 EF 7 년 이후 Softdelete는 속성으로 추가되지만 우리는 시간이 지금 것에 대한 사용자 지정 특성을 만들어야합니다.

    난 강력하게 데이터베이스 설계 및 프로그래밍 연습을위한 자사의 좋은 규칙에서 SoftDelete을 추천합니다.

  19. ==============================

    19.일부 데이터를 노출하고 싶지 않기 때문에 시간 softdeleting의 대부분은 사용하지만 당신은 (A 제품은 당신이 그것으로 새로운 거래를하지 않도록, 중단하지만 여전히 작업에 필요한 될 수있는 역사적 이유를 계속해야 매각 거래의 역사). 그런데, 일부는 판매 거래 데이터에서 제품 정보 값을 복사하는 대신 제품에 대한 참조가이 문제를 처리하고 있습니다.

    일부 데이터를 노출하고 싶지 않기 때문에 시간 softdeleting의 대부분은 사용하지만 당신은 (A 제품은 당신이 그것으로 새로운 거래를하지 않도록, 중단하지만 여전히 작업에 필요한 될 수있는 역사적 이유를 계속해야 매각 거래의 역사). 그런데, 일부는 판매 거래 데이터에서 제품 정보 값을 복사하는 대신 제품에 대한 참조가이 문제를 처리하고 있습니다.

    사실 그것은 더 볼 / 숨기거나 활성 / 비활성 기능에 대한 새로운 표현처럼 보인다. 그의 의미이기 때문에 비즈니스 세계에서 "삭제". 나는 터미네이터가 사람을 삭제할 수 있지만, 상사가 단지 그들을 해고 말을하고 싶습니다.

    이 연습은 매우 일반적인 패턴과 많은 이유에 대한 응용 프로그램의 많은에 의해 사용됩니다. 그것은이 달성 할 수있는 유일한 방법이 아니다으로, 그래서 당신은 사람 만이 그 위대한 말 또는 헛소리 둘 다 꽤 좋은 인수를해야합니다.

    보안의 관점에서, SoftDelete는 감사의 작업을 대체하지 않습니다 그것은 너무 백업 작업을 대체하지 않습니다. 당신이 "두 백업 케이스 사이 삭제 삽입 /"두려워하면 전체 또는 대량 복구 모델에 대해 읽어야합니다. 나는 SoftDelete 복구 프로세스를보다 사소한 만들 수 있음을 인정한다.

    당신까지 귀하의 요구 사항을 알 수 있습니다.

  20. ==============================

    20.대안을 제공하기 위해, 우리는 MobiLink를 통해 업데이트 원격 장치를 사용하여 사용자를 가지고있다. 우리는 서버 데이터베이스에서 레코드를 삭제하면 레코드는 클라이언트 데이터베이스에서 삭제되지 표시된 얻을 않았다.

    대안을 제공하기 위해, 우리는 MobiLink를 통해 업데이트 원격 장치를 사용하여 사용자를 가지고있다. 우리는 서버 데이터베이스에서 레코드를 삭제하면 레코드는 클라이언트 데이터베이스에서 삭제되지 표시된 얻을 않았다.

    우리는 둘 다 할 수 있도록. 우리는 그들이 데이터를 복구 할 수 할 시간을 결정하기 위해 고객과 함께 작동합니다. 우리의 고객들이 삭제해야 말할 때까지 예를 들어, 일반적으로 고객과 제품은 활성화되어 있지만, 매출의 역사는 13 개의 달 동안 유지 된 후 자동으로 삭제됩니다. 클라이언트는 두 달 동안 삭제 고객과 제품을 유지하지만 6 개월 동안의 역사를 보존 할 수 있습니다.

    우리는 마크 일들이 논리적으로 두 / 6 개월 후 이들 파라미터에 따라 삭제하는 스크립트 하룻밤을 실행 그래서, 아무것도 표시 논리적으로 삭제 오늘 하드 삭제됩니다.

    우리는 적은 데이터 보안에 대한 이러한 스마트 폰과 같은 제한된 메모리를 가진 클라이언트 장치에 엄청난 데이터베이스를 가진 약입니다. 4 년 동안의 주문 (200 개) 제품 일주일에 두 번 그가 보는 경우 클라이언트가 상관하지 않는 75 %의 역사를 통해 81,000 라인을해야합니다 클라이언트.

  21. ==============================

    21.그것은 모든 시스템 및 데이터의 사용 사례에 따라 달라집니다.

    그것은 모든 시스템 및 데이터의 사용 사례에 따라 달라집니다.

    당신은 (품질 시스템의 일부로 간주되며, 전자 기록에 대한 FDA의 가이드 라인을 따라야 제약 회사에서, 예를 들어 시스템) 정부 규제 시스템에 대해 이야기하는 경우 예를 들어, 당신은 잘 꿰매 더 나은 하드 삭제하지! 미국 FDA로부터의 감사가 와서 제품 번호 ABC-123에 관한 시스템의 모든 기록을 요청하고, 모든 데이터를 더 사용할 수 있습니다. 비즈니스 프로세스 소유자가 시스템이 새 레코드에 사용하는 제품 번호 ABC-123에 사람이 향후 허용해서는 안 말한다면, 여전히 기록 데이터를 유지하면서, 시스템 내에서 "비활성"만드는 대신 소프트 삭제 방법을 사용합니다.

    그러나, 어쩌면 당신의 시스템과 데이터는 "북극의 날씨 추적 '등을 사용하는 경우가 있습니다. 어쩌면 당신은 매 시간마다 한 번 온도 측정을하고, 하루의 끝에 매일 평균을 집계. 아마 시간별 데이터는 더 이상 지금까지 집계 한 후 사용되지 않습니다, 당신은 총을 만든 후 시간마다 측정 값을 하드 삭제 것입니다. (이 만들어 낸 사소한 예이다.)

    요점은 모든 시스템과 데이터, 그리고 기술적 관점에서 순수하게 만들 수있는 결정의 사용 사례에 의존합니다.

  22. ==============================

    22.잘! 모두가 말했듯이, 그것은 상황에 따라 달라집니다.

    잘! 모두가 말했듯이, 그것은 상황에 따라 달라집니다.

    당신은 사용자 이름이나 이메일 ID와 같은 컬럼에 인덱스가있는 경우 - 당신은 다시는 사용되는 동일한 사용자 이름 또는 이메일 ID를 기대합니다; 당신은 소프트 삭제와 함께 갈 수 있습니다.

    그게 당신의 SELECT 작업은 기본 키를 사용하는 경우 항상 확인했다. 당신의 SELECT 문은 WHERE 절에 플래그를 추가, 기본 키를 사용하는 경우 많은 변화를하지 않을 것입니다. 다음의 예제 (의사)를 보자 :

    표 사용자 (사용자 ID [기본 키, EMAILID,에 isDeleted)

    SELECT * FROM Users where UserID = 123456 and IsDeleted = 0
    

    아이디 열이 기본 키를 가지고 있기 때문에이 쿼리는 성능면에서 어떤 차이를하지 않습니다. 초기에는 PK를 기반으로 테이블을 스캔하고 다음 조건을 실행합니다.

    소프트 삭제가 전혀 작동하지 않을 수있는 경우 :

    가입 모든 웹 사이트가 사용자의 고유 식별로 이메일 ID를 가지고 majorly에. 이메일 ID가 페이스 북과 같은 웹 사이트, G +에 사용되면 우리는 잘 알고있다, 그것은 다른 사람이 사용할 수 없습니다.

    사용자가 웹 사이트에서 그 / 그녀의 프로필을 삭제하고 싶은 날이 온다. 당신이 논리적 삭제를 할 경우 이제 해당 사용자는 다시 지금까지 등록 할 수 없습니다. 또한, 같은 EMAILID를 사용하여 다시 등록하면 전체 역사를 복원하는 것을 의미하지 않을 것입니다. 모두 삭제 삭제를 의미 알고있다. 이러한 시나리오에서, 우리는 실제 h를해야한다. 하지만 계정의 전체 역사를 유지하기 위해, 우리는 하나 아카이브 테이블 또는 삭제 테이블의 기록을 반드시 보관해야한다.

    예, 우리는 외국 테이블을 많이 가지고 상황에서, 처리는 매우 복잡합니다.

    또한 소프트 / 논리적 삭제 인덱스 크기 때문에, 테이블의 크기가 증가 할 것으로 명심하십시오.

  23. ==============================

    23.나는 이미 다른 게시물에 대답했다. 그러나, 나는 여기에 질문에 대한 내 대답이 더 적절하다고.

    나는 이미 다른 게시물에 대답했다. 그러나, 나는 여기에 질문에 대한 내 대답이 더 적절하다고.

  24. ==============================

    24.Adventages 데이터 보존 / 영속 있습니다. 쿼리 또는 소프트 삭제의 significal 액수와 테이블에서 데이터를 검색 할 때 disventage 성능이 저하 될 것입니다. 우리의 경우 우리는이 둘의 조합을 사용 : 다른 사람이 이전 답변에서 언급 한 것처럼, 우리 소프트 삭제 사용자 / 클라이언트 / 고객 예를 들어,과 그렇지 않은 기록이 중복되는 경우 아이템 / 제품 / 상품 테이블에 하드 삭제 꿀벌 keept해야합니다.

    Adventages 데이터 보존 / 영속 있습니다. 쿼리 또는 소프트 삭제의 significal 액수와 테이블에서 데이터를 검색 할 때 disventage 성능이 저하 될 것입니다. 우리의 경우 우리는이 둘의 조합을 사용 : 다른 사람이 이전 답변에서 언급 한 것처럼, 우리 소프트 삭제 사용자 / 클라이언트 / 고객 예를 들어,과 그렇지 않은 기록이 중복되는 경우 아이템 / 제품 / 상품 테이블에 하드 삭제 꿀벌 keept해야합니다.

  25. ==============================

    25.그것은 경우에 따라의를 아래 고려 :

    그것은 경우에 따라의를 아래 고려 :

    일반적으로, 당신은 "소프트 삭제"기록 할 필요가 없습니다. 간단하고 빠르게 유지. 예를 들면 제품을 확인하지 않아도, 제품은 더 이상 사용할 수 삭제하지 것은 아니다 귀하의 응용 프로그램 (수, 제품 목록, 추천 제품 등)을 통해 모든 소프트 삭제.

    그러나, 당신은 데이터웨어 하우스 모델의 "소프트 삭제"를 고려할 수 있습니다. 예를 들면 삭제 된 제품에 오래된 영수증을보고 있습니다. *

  26. from https://stackoverflow.com/questions/378331/physical-vs-logical-soft-delete-of-database-record by cc-by-sa and MIT license