이전에는 각 테이블에 필드를 추가하고 모든 업데이트/삽입에서 GETDATE()를 사용하여 필드를 업데이트했습니다. 문제는 이제 삭제를 추적해야합니다. 나는 테이블이 변경 될 때마다 업데이트하고 모든 다른 테이블에 트리거를 추가하는 것을 생각하고있었습니다. 아이디어 ??? 감사!테이블에서 SQL을 업데이트 할 때를 추적하는 가장 좋은 방법은 무엇입니까?
답변
원본 테이블의 변경 사항에 대한 모든 내용을 추적 할 수있는 기록 테이블 (원본 테이블과 동일한 열과 자동 증분 ID 열이있는 테이블)이있는 경우 삽입, 삭제 및 모든 변경 사항을 추적 할 수 있습니다. 삽입, 갱신 W h 제에 대한 트리거를 사용하여 행을 히스토리 테이블에 넣으십시오. 이러한 모든 옵션이 필요하지 않은 경우 필요한 옵션을 사용하십시오.
원본 테이블에서 IsDeleted 플래그를 사용하면 모든 쿼리가 복잡해지며 활성 테이블에 많은 불필요한 행이 남습니다. 그러나 그것은 당신의 필요에 따라 작동 할 수 있습니다.
레코드를 삭제됨 = 1로 플래그를 지정하고 삭제하지 않습니다. 삭제 대신 트리거를 업데이트하십시오 ...
비트 필드가 IsDeleted로 설계된 테이블을 보았고 기본값은 물론 false로 설정되었습니다. 항목이 삭제되면이 값은 true로 설정됩니다. 그러면 모든 쿼리가 다음을 수행해야합니다.
SELECT blah FROM myTable WHERE IsDeleted=0
이렇게하면 실수로 행을 삭제 한 경우 다시 가져올 수 있습니다. 또한 매주/매월/매년 기준으로 기록을 삭제할 수 있습니다.
그것은 단지 당신을위한 아이디어입니다.
많은 DB도 다소 비슷한 효과적인 날짜 개념을 사용합니다. – Sam
이름에 표준화 된 접두사가 추가 된 복제 테이블을 보았습니다. 삭제 된 모든 행은 복제 테이블로 이동됩니다. 이렇게하면 원본 테이블의 행을 무시하지 않고 유지하는 오버 헤드가 제거됩니다.
모든 작업 (insert - update - delete)은 저널링 테이블에 기록되어야합니다. 나는 항상 행동, 타임 스탬프, 행동을 유발 한 사용자를 기록한다. 원본 테이블에 Isdelete 열을 추가하는 것은 좋지 않습니다.
@Chris - 전혀 나쁜 습관이 아닙니다.일부 회사에서는 이와 같은 디자인을 요구하며 저널링 테이블에는 문제가 없습니다. 그러나 사람들이 IsDeleted 열을 추가한다고 말하는 것은 나쁜 습관 그 자체입니다. – JonH
그럼 다시 말해 보겠습니다. 원래 테이블 내부 IsDeleted 열 사용에 대한 조언. 두 가지 이유로 : 다른 포스터에서 지적한 바와 같이. 그것은 당신의 질문을 복잡하게합니다. 또는 더 나쁜 것은 삭제 된 데이터를 사용자에게 표시하여이 열을 필터링하는 것을 잊어 버린 것일 수 있습니다. 둘째, 저는 항상 DB 설계에서 기능 및 기술 데이터를 분리하려고합니다. 나는 이것을 하나의 테이블에 혼합하는 것이 좋은 생각이라고 생각하지 않는다. – Chris
세 번째 이유를 언급하는 것을 잊어 버렸습니다. 원래 테이블에 'Isdeleted'레코드를 저장하면 이후에 성능 문제가 될 수 있습니다 (레코드 수, 삭제 된 레코드 수에 따라 다름). 별도의 테이블에 보관하면 필요할 때만 쿼리 할 수 있습니다. – Chris
SQL Server 2008을 사용하는 경우 new auditing features을 이용할 수 있습니다.
SQL 2008을 사용하는 경우 추적을 위해 CDC (Change Data Capture)를 사용할 수 있습니다.
아래 링크는 자세한 내용을 제공합니다. 특정 테이블에 대해 cdc를 활성화하면 자동으로 데이터를 삭제합니다.
- 1. 순 방문자를 추적하는 가장 좋은 방법은 무엇입니까?
- 2. 전자 메일보기를 추적하는 가장 좋은 방법은 무엇입니까?
- 3. 데이터베이스에서 수정 된 튜플을 추적하는 가장 좋은 방법은 무엇입니까?
- 4. SQLite 테이블에서 키를 변경하는 가장 좋은 방법은 무엇입니까?
- 5. 가장 효율적인 방식으로 조회수를 추적하는 방법은 무엇입니까?
- 6. Android 용 '앱 열림'측정 항목을 추적하는 가장 좋은 방법은 무엇입니까?
- 7. Objective-C에서 클래스 인스턴스를 추적하는 가장 좋은 방법은 무엇입니까?
- 8. 두 테이블에서 데이터를 가져 오려면 가장 좋은 방법은 무엇입니까?
- 9. Eclipse 업데이트 사이트에서 다운로드를 추적하는 방법은 무엇입니까?
- 10. 데이터베이스의 목록을 업데이트하는 가장 좋은 방법은 무엇입니까?
- 11. 페이지 뷰를 추적하는 가장 좋은 방법
- 12. 다른 테이블에서 UITableView를 사용하는 가장 좋은 방법은 무엇입니까?
- 13. 조회 테이블에서 I18N을 처리하는 가장 좋은 방법은 무엇입니까?
- 14. 내 페이지를 저장해야 할 때를 감지하는 가장 좋은 방법은 무엇입니까 - ussing WPF MVVM
- 15. 견적 작성자 - SQL을 사용하는 가장 좋은 방법
- 16. 현재 온라인 사용자를 추적하는 가장 좋은 방법
- 17. iPhone에서 편지를 추적하는 가장 좋은 방법
- 18. 정렬 된 smalldatetime 열을 추적하는 가장 좋은 방법은
- 19. 테이블에서 필드를 업데이트 할 때 원 자성을 보장하는 방법은 무엇입니까?
- 20. 스택 위의 UIViewController가 팝되었을 때를 알 수있는 가장 좋은 방법은 무엇입니까?
- 21. PHP에서 가장 좋은 방법은 무엇입니까?
- 22. 서식 상태를 관리하는 가장 좋은 방법은 무엇입니까?
- 23. CustomViewData에 가장 좋은 방법은 무엇입니까?
- 24. 사전 데이터베이스를 만드는 가장 좋은 방법은 무엇입니까
- 25. C# 프로그램에서 인쇄하는 가장 좋은 방법은 무엇입니까?
- 26. 두 테이블에서 MERGE를 업데이트 할 수 있습니까?
- 27. MBean의 가장 좋은 방법은 무엇입니까?
- 28. MATLAB에서 가장 좋은 방법은 무엇입니까?
- 29. ORM으로 테이블을 만드는 가장 좋은 방법은 무엇입니까?
- 30. ST 모나드에서 기능들 사이의 여러 참조를 추적하는 좋은 방법은 무엇입니까?
어떤 SQL Server 버전을 사용하고 있습니까? SQL 2008은 사용하기에 충분할 정도로 운이 좋을지도 모르는 심각한 변경 추적 기능을 도입했습니다. - '변경 추적'및 '변경 데이터 캡처'를 검색합니다 (IIRC). –
아직도 2005 년 ... – Mike