68 votes

Logique d'entreprise dans la base de données par rapport au code?

En tant qu'ingénieur logiciel, j'ai un fort penchant pour l'écriture de la logique métier de l'application de la couche, tandis que de s'en remettre à la base de données pour un peu plus de CRUD (Create Récupérer la mise à Jour et Suppression) des opérations. D'autre part, j'ai couru à travers les applications (généralement les plus anciennes), où une grande quantité de la logique d'affaires a été écrit dans les procédures stockées, donc il y a des gens qui préfèrent écrire la logique métier dans la base de données de la couche.

Pour les personnes qui l'ont et/ou profiter de l'écrit/l'écriture de la logique dans une procédure stockée, quelles ont été/sont vos raisons pour l'utilisation de cette méthode?

43voto

Matt Wrock Points 4772

J'essaie de limiter sérieusement ma logique métier dans la DB pour seulement procs qui ont à faire beaucoup d'interrogation et de mise à jour à effectuer une seule demande de l'opération. Certains pourraient faire valoir que, même dans l'application, mais je tiens à garder le IO vers le bas, si je peux.

Les bases de données sont grands pour CRUD, mais si elles obtiennent le plein de logique:

  1. Il devient confuse où la logique est,
  2. Généralement, les bases de données sont un silo et ne pas l'échelle horizontale presque aussi bien que de l'application des serveurs.
  3. t_sql/PLsql est difficile de lire et de procédure dans la nature
  4. Vous perdez tous les avantages de la OOAD.

30voto

ardave Points 699

Dans la mesure du possible, conservez votre logique métier dans l'environnement le plus testable et le plus pouvant être débogué . Il existe des raisons valables de stocker la logique métier dans la base de données dans les réponses existantes d'autres personnes, mais elles sont presque toujours dépassées.

20voto

HLGEM Points 54641

La limitation de la logique métier de l'application de la couche est à courte vue, au mieux. Professionnel expérimenté concepteurs de bases de données ne permettent que rarement sur leurs systèmes. Base de données doivent avoir les contraintes et stockées et les déclencheurs procs pour aider à définir la manière dont les données à partir de toute source d'aller en elle.

Si la base de données est de maintenir son intégrité et à s'assurer que toutes les sources de données nouvelles ou les modifications de données de suivre les règles, la base de données est l'endroit pour mettre la logique requise. Mettre la couche application est une base de données cauchemar en attente de se produire. Les bases de données ne pas obtenir de l'information à partir d'une application. La logique métier de l'application est souvent involontairement court-circuité par des importations (en supposant que vous avez un nouveau client qui voulait leur vieille données importées à votre système ou sur un grand nombre d'enregistrements cibles, personne ne va entrer à un million de cibles possibles grâce à l'interface, il arrive dans un de l'importation). Il est également ignorés par la modification faite par le biais de la fenêtre de requête pour résoudre un des problèmes de temps (des choses comme l'augmentation du prix de tous les produits de 10%). Si vous avez de l'application de la couche de logique qui aurait été appliqué à la modification de données, il ne sera pas. Maintenant, c'est ok pour le mettre dans la couche d'application, aucun sens de l'envoi de données de mauvaise qualité à la base de données et de gaspiller de la bande passante du réseau, mais à ne pas mettre dans la base de données sera tôt ou tard causer des problèmes de données.

Une autre raison de garder tout cela dans la base de données a pour de avec la possibilité pour les utilisateurs de commettre une fraude. Si vous mettez toute votre logique dans la couche d'application, alors vous devez accorder aux utilisateurs d'accéder directement aux tables. Si vous encapsuler toute votre logique dans stockées procs, ils peuvent se limiter à ne faire que ce que l'stockées procs permettre et pas autre chose. Je ne voudrais pas envisager de permettre à tout type de l'accès par les utilisateurs à une base de données qui stocke les rapports financiers ou les renseignements personnels (tels que les dossiers de santé) que je ne voudrais pas permettre à quiconque à l'exception de quelques administrateurs de bases de données afin d'accéder directement à la production de dossiers en aucune façon, la forme ou la forme. Plus la fraude est commise que de nombreux développeurs de réaliser et presque aucun d'entre eux considèrent que la possibilité dans leur conception.

Si vous avez besoin d'importer de grandes quantités de données, en passant par une couche d'accès aux données pourrait ralentir l'importation d'une analyse car il ne prend pas advanatge de l'ensemble des opérations basées que les bases de données sont conçues pour gérer.

16voto

Erwin Smout Points 7499

Votre usage du terme de "logique d'entreprise" est plutôt vague.

Il peut être interprété pour signifier à l'exécution de contraintes sur les données (aka "business rules"). L'application de ces sans équivoque appartient dans le sgbd, période.

Il peut également être interprété dans le sens d'inclure des choses comme "si un nouveau client arrive, puis dans une semaine, nous avons de lui envoyer une lettre de bienvenue." Essaie de faire des trucs comme ça dans la couche de données est probablement une grosse erreur. Dans de tels cas, le pilote de "créer une nouvelle lettre de bienvenue" devrait probablement être l'application qui déclenche également le nouveau client d'insertion de ligne. Imaginez chaque nouvelle base de données d'insertion de ligne de déclencher une nouvelle lettre de bienvenue, et puis tout à coup nous prenons en charge une autre société et que nous devons intégrer que les clients de l'entreprise dans notre base de données ... Ouch.

12voto

Joe Points 17829

Nous effectuons beaucoup de traitements dans le niveau base de données, le cas échéant. Il existe de nombreuses opérations sur lesquelles vous ne voudriez pas extraire de grands ensembles de données au niveau des applications pour effectuer des analyses. C'est également un déploiement plus facile pour nous: un seul point par rapport à la mise à jour des applications à tous les points d'installation. Mais beaucoup dépend de votre application et de ce qu'elle fait. il n'y a pas une seule bonne réponse ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X