Saat ini, kami memiliki database dan aplikasi yang sudah ada yang berfungsi penuh. Saya tidak memiliki kemampuan untuk mengubah arsitektur pada saat ini. Hari ini, setiap tabel dalam database memiliki bidang "IsDeleted" BUKAN NULL BIT dengan default '0'. Ketika aplikasi "menghapus" data, itu hanya memperbarui bendera IsDeleted ke 1.
Yang saya mengalami kesulitan memahami adalah bagaimana indeks pada masing-masing tabel harus disusun. Saat ini, setiap query / join / etc selalu mengimplementasikan pemeriksaan IsDeleted. Ini adalah standar yang harus diikuti oleh pengembang kami. Yang sedang berkata, saya mencoba untuk menentukan apakah semua indeks kunci utama berkerumun saya pada setiap tabel perlu diubah untuk memasukkan kunci utama DAN bidang BIT IsDeleted. Juga, karena SETIAP permintaan / gabung / dll. harus menerapkan pemeriksaan IsDeleted, apakah ini asumsi yang tepat bahwa indeks SETIAP TUNGGAL (non-clustered juga) harus menyertakan bidang IsDeleted sebagai bidang pertama indeks?
Satu pertanyaan lain yang saya miliki adalah sekitar indeks yang difilter. Saya mengerti bahwa saya dapat menempatkan filter pada indeks seperti "WHERE IsDeleted = 0" untuk mengurangi ukuran indeks. Namun, karena setiap join / kueri harus mengimplementasikan cek IsDeleted, apakah itu akan mencegah indeks difilter dari digunakan (karena kolom IsDeleted digunakan dalam join / query)?
Ingat, saya tidak memiliki kemampuan untuk mengubah pendekatan IsDeleted.
IsDeleted
kolom, terlepas dari penyimpanan fisik, mungkin masuk akal untuk mengekspos data melalui dua tampilan (opsional dalam skema yang berbeda), menyelesaikan masalah parameterisasi dan membuat kesalahan dengan mengakses data yang seharusnya tidak diakses lebih kecil kemungkinannya. Mengakses data dasar hanya relevan untuk kasus-kasus langka di mana data yang dihapus dan tidak terhapus perlu digabungkan entah bagaimana, dan ketika baris sebenarnya perlu diubah ke "dihapus".