Hiện tại, chúng tôi có một cơ sở dữ liệu và ứng dụng hiện có đầy đủ chức năng. Tôi không có khả năng thay đổi kiến trúc vào thời điểm này. Ngày nay, mỗi bảng trong cơ sở dữ liệu có trường "Không bị xóa" KHÔNG NULL BIT với mặc định là '0'. Khi ứng dụng "xóa" dữ liệu, nó chỉ cần cập nhật cờ IsDelatted thành 1.
Điều tôi gặp khó khăn trong việc hiểu là làm thế nào các chỉ mục trên mỗi bảng nên được cấu trúc. Ngay bây giờ, mọi truy vấn / tham gia / etc luôn thực hiện kiểm tra IsDelatted. Đó là một tiêu chuẩn mà các nhà phát triển của chúng tôi phải tuân theo. Điều đó đang được nói, tôi đang cố gắng xác định xem tất cả các chỉ mục khóa chính được nhóm của tôi trên mỗi bảng có cần phải được thay đổi để bao gồm khóa chính VÀ trường BIT bị xóa hay không. Ngoài ra, vì MỌI truy vấn / tham gia / v.v. phải thực hiện kiểm tra IsDelatted, đó có phải là một giả định thích hợp rằng MỌI chỉ số SINGLE (cũng không được phân cụm) nên bao gồm trường IsDelatted là trường đầu tiên của chỉ mục không?
Một câu hỏi khác tôi có là xung quanh các chỉ mục được lọc. Tôi hiểu rằng tôi có thể đặt các bộ lọc vào các chỉ mục, chẳng hạn như "WHERE IsDelatted = 0" để giảm kích thước của các chỉ mục. Tuy nhiên, vì mọi liên kết / truy vấn sẽ phải thực hiện kiểm tra IsDelatted, điều đó có ngăn chặn chỉ mục được lọc không được sử dụng (vì cột IsDelatted được sử dụng trong tham gia / truy vấn)?
Hãy nhớ rằng, tôi không có khả năng thay đổi cách tiếp cận IsDelatted.
IsDeleted
cột, bất kể lưu trữ vật lý, có thể có ý nghĩa để lộ dữ liệu qua hai chế độ xem (tùy chọn trong các lược đồ khác nhau), giải quyết cả vấn đề tham số hóa và mắc lỗi khi truy cập dữ liệu không nên có truy cập ít có khả năng. Truy cập dữ liệu cơ sở chỉ liên quan đến các trường hợp hiếm hoi trong đó dữ liệu bị xóa và không xóa cần được kết hợp bằng cách nào đó và khi các hàng thực sự cần phải được chuyển sang "bị xóa".