Actuellement, je travaille sur une application métier moche écrite en Access qui prend une feuille de calcul sur une base bi-quotidienne et l'importe dans un fichier MDB. Je suis en train de convertir un projet majeur qui inclut ceci en SQL Server et .net, plus précisément en c#.
Pour stocker ces informations, il y a deux tables (noms d'alias ici) que j'appellerai Master_Prod et Master_Sheet liées par une clé identitaire parent à la table Master_Prod, ProdID. Il y a aussi deux autres tables pour stocker l'historique, History_Prod et History_Sheet. Il y a d'autres tables qui étendent Master_Prod, mais je limite cela à deux tables à des fins d'explication.
Comme cela a été écrit en Access, la subroutine pour gérer ce fichier est parsemée de déclencheurs codés manuellement pour gérer l'historique qui ont toujours été une douleur constante à gérer, une raison pour laquelle je suis heureux que cela soit transféré vers un serveur de base de données plutôt qu'un outil RAD. J'écris des déclencheurs pour gérer le suivi de l'historique.
Mon plan était de créer un objet modélisant la feuille de calcul, d'y analyser les données et d'utiliser LINQ pour effectuer des vérifications côté client avant d'envoyer les données au serveur... En gros, je dois comparer les données de la feuille à un enregistrement correspondant (à moins qu'il n'y en ait pas, auquel cas c'est nouveau). Si l'un des champs a été modifié, je veux envoyer la mise à jour.
À l'origine, j'espérais mettre cette procédure dans une sorte d'assembly CLR qui accepte une liste IEnumerable puisque j'aurai déjà la feuille de calcul sous cette forme, mais j'ai récemment appris que cela sera associé à un serveur de base de données plutôt important qui me préoccupe beaucoup en termes de ralentissement.
Vaut-il la peine de mettre en place une procédure stockée CLR pour cela ? Il y a d'autres points d'entrée où les données entrent et si je pouvais construire une procédure pour les gérer en fonction des objets passés, alors je pourrais retirer beaucoup de règles métier de l'application au détriment des performances potentielles de la base de données.
En gros, je veux retirer la vérification des mises à jour du client et la mettre sur la base de données afin que le système de données gère si oui ou non la table doit être mise à jour pour que le déclencheur d'historique puisse être déclenché.
Des idées sur une meilleure façon de mettre en œuvre cela dans la même direction ?