J'ai appliqué des règles métier à la fois dans mon niveau d'application (modèles) et dans mon niveau de base de données (procédures stockées qui génèrent des erreurs).Les règles métier doivent-elles être appliquées à la fois au niveau application et au niveau base de données, ou seulement à l'un des deux?
J'ai double emploi avec mes validations dans les deux endroits pour quelques raisons:
- Si les conditions changent entre quand ils sont contrôlés dans le code d'application et quand ils sont vérifiés dans la base de données, les contrôles de règles métier dans la base de données permettront d'économiser la journée. La base de données me permet également de verrouiller divers enregistrements d'une manière plus simple que dans mon code d'application, il semble donc naturel de le faire ici.
- Si nous avons faire des données par lots insertions/mises à jour de la base de données directement, si je voie toutes ces opérations par mes procédures/fonctions stockées qui faites la règle de gestion de validation, il n'y a aucune chance de moi mettre dans les mauvaises données même si je n'ai pas les protections que j'obtiendrais si je faisais une seule entrée à travers l'application.
- Alors que l'application de ces choses que dans la base aurait le même effet sur les données réelles, il semble inconvenant de simplement jeter des données à la base de données avant d'abord une bonne effort pour valider sa conformité à contraintes et règles métier.
Quel est le bon équilibre?
Quelle est la différence entre l'application de la logique métier et l'application de l'intégrité des données? Supposons que j'ai une règle d'entreprise qui dit au plus 3 personnes peuvent être assignées à un superviseur. Lorsque je vais insérer la personne n ° 4, est-ce un échec, car il s'agit d'une erreur d'intégrité des données de plus de trois personnes par superviseur ou s'agit-il d'une violation des règles métier? Sans verrouiller l'enregistrement du superviseur avant la vérification qu'il y a au plus 2 personnes sous un superviseur lors d'une insertion, comment le code de l'application peut-il être sûr à 100% que cette règle ne sera pas brisée? –
@Rednerln - taux de variation. Les règles d'intégrité de la base de données sont susceptibles d'être vraies pendant beaucoup plus longtemps que les règles métier. Votre exemple de personnes à un superviseur, j'aurais du mal à justifier de faire une contrainte de base de données, si je le faisais, cela devrait être basé sur des données (udf basé sur un paramètre de configuration). Et si la règle change, il faut se demander ce qu'il faut faire à propos des données qui violent ce principe. Généralement, vous voulez des règles de base de données qui ne sont que relaxées, pas resserrées ou modifiées qualitativement. –
@Rednerln - dans des situations multimodales, vous voulez que les gens puissent toucher votre couche d'accès DB (vues, peut-être) avec leurs outils de BI ou autre et sachez que leurs hypothèses sont valides, que la base de données est cohérente et intègre périmètre. –