현재 모든 기능을 갖춘 기존 데이터베이스 및 응용 프로그램이 있습니다. 현재 아키텍처를 변경할 수 없습니다. 현재 데이터베이스의 각 테이블에는 기본값이 '0'인 "IsDeleted"NOT NULL BIT 필드가 있습니다. 응용 프로그램이 데이터를 "삭제"하면 단순히 IsDeleted 플래그를 1로 업데이트합니다.
내가 이해하는 데 어려움이있는 것은 각 테이블의 인덱스를 구성하는 방법입니다. 현재 모든 쿼리 / 가입 / 등은 항상 IsDeleted 검사를 구현합니다. 개발자가 따라야 할 표준입니다. 즉, 각 테이블의 모든 클러스터 된 기본 키 인덱스를 기본 키와 IsDeleted BIT 필드를 포함하도록 변경해야하는지 확인하려고합니다. 또한 모든 쿼리 / 가입 / 기타 이후. IsDeleted 검사를 구현해야합니다. 모든 단일 인덱스 (비 클러스터형)도 IsDeleted 필드를 인덱스의 첫 번째 필드로 포함해야한다는 적절한 가정입니까?
내가 가진 또 다른 질문은 필터링 된 인덱스에 관한 것입니다. 인덱스 크기를 줄이기 위해 "WHERE IsDeleted = 0"과 같은 인덱스에 필터를 배치 할 수 있음을 이해합니다. 그러나 모든 조인 / 쿼리에서 IsDeleted 검사를 구현해야하므로 필터링 된 인덱스가 사용되지 않습니다 (IsDeleted 열이 조인 / 쿼리에 사용되므로)?
IsDeleted 접근 방식을 변경할 수는 없습니다.
IsDeleted
컬럼 의 유비쿼터스와 중요성을 고려할 때 물리적 스토리지에 관계없이 두 가지보기 (선택적으로 다른 스키마)를 통해 데이터를 노출하는 것이 합리적 일 수 있습니다. 가능성이 적습니다. 기본 데이터에 액세스하는 것은 삭제 된 데이터와 삭제되지 않은 데이터를 어떻게 든 결합해야하는 경우와 실제로 행을 "삭제됨"으로 전환해야하는 경우에만 해당됩니다.