Actuellement, nous avons une base de données et une application existantes qui sont entièrement fonctionnelles. Je n'ai pas la possibilité de changer l'architecture à ce stade. Aujourd'hui, chaque table de la base de données possède un champ "IsDeleted" NOT NULL BIT avec une valeur par défaut de "0". Lorsque l'application «supprime» les données, elle met simplement à jour l'indicateur IsDeleted à 1.
Ce que j'ai du mal à comprendre, c'est comment les index de chacune des tables doivent être structurés. À l'heure actuelle, chaque requête / jointure / etc implémente toujours la vérification IsDeleted. C'est une norme que nos développeurs doivent suivre. Cela étant dit, j'essaie de déterminer si tous mes index de clé primaire en cluster sur chacune des tables doivent être modifiés pour inclure la clé primaire ET le champ IsDeleted BIT. De plus, puisque CHAQUE requête / jointure / etc. doit implémenter la vérification IsDeleted, est-ce une hypothèse appropriée que CHAQUE index SINGLE (non cluster également) devrait inclure le champ IsDeleted comme premier champ de l'index?
Une autre question que je me pose concerne les index filtrés. Je comprends que je pourrais mettre des filtres sur les index tels que "WHERE IsDeleted = 0" pour réduire la taille des index. Cependant, comme chaque jointure / requête devra implémenter la vérification IsDeleted, cela empêcherait-il l'utilisation de l'index filtré (puisque la colonne IsDeleted est utilisée dans la jointure / requête)?
N'oubliez pas que je n'ai pas la possibilité de modifier l'approche IsDeleted.
IsDeleted
colonne, quel que soit le stockage physique, il serait probablement judicieux d'exposer les données à travers deux vues (éventuellement dans des schémas différents), résolvant à la fois le problème de paramétrage et faisant des erreurs avec l'accès aux données qui n'auraient pas dû être accès moins probable. L'accès aux données de base n'est pertinent que dans les rares cas où les données supprimées et non supprimées doivent être combinées d'une manière ou d'une autre, et lorsque les lignes doivent réellement être commutées sur "supprimées".