NOTE L'audience de programmers.se et de dba.se est différente et aura des points de vue différents. Par conséquent, dans ce cas, je pense qu'il est correct de dupliquer. Quels sont les arguments pour ou pour placer la logique d'application dans la couche base de données? sur programmers.se.
Je n'ai pas encore trouvé de discussion sur dba à ce sujet, et le post original dit tout, donc:
La plupart des développeurs de logiciels souhaitent conserver la logique de l'application dans la couche application, ce qui nous semble probablement naturel. Les développeurs de bases de données semblent vouloir placer la logique de l'application dans la couche base de données, en tant que déclencheurs et procédures stockées.
Personnellement, je préférerais garder autant que possible dans la couche d'application pour faciliter le débogage et maintenir les responsabilités des couches séparées.
Que pensez-vous de cela et que devrait ou ne devrait pas être implémenté dans la couche base de données?
NB: je ne suis pas le PO pour cette question, mais j'ai laissé le libellé original intact.
la source
Réponses:
Pensées assorties ...
Votre code de base de données survivra à la technologie de votre client d'application. Pensez à ADO.NET -> Linq -> EF ainsi qu’à des ORM assortis. Considérant que vous pouvez toujours exécuter le code SQL Server 2000 du dernier millénaire contre toutes les technologies client ci-dessus.
Vous avez également le problème de client multiple: j'ai .net, java et Excel. C'est 3 ensembles de logique d'application.
La "logique métier" ne doit pas être confondue avec la "logique d'intégrité des données". Si vous avez des clients qui commencent des transactions et effectuent des vérifications assorties, cela représente beaucoup d'appels à une base de données et une transaction longue.
La logique d'application ne s'adapte pas aux volumes de données élevés. Nous avons 50k lignes par seconde en utilisant les procs stockés. Une équipe soeur utilisant Hibernate ne peut en obtenir un par seconde
la source
Je veux toute la logique qui doit s’appliquer à tous les utilisateurs et à toutes les applications de la base de données. C'est le seul endroit raisonnable pour le dire.
Lors du dernier Fortune 500 où j'ai travaillé, des applications écrites dans au moins 25 langues ont été enregistrées dans leur base de données OLTP. Certains de ces programmes sont passés à la production dans les années 1970.
L’alternative à l’implémentation de ce type d’exigences dans la base de données est de laisser chaque programmeur d’application le réimplémenter correctement, en tout ou en partie, chaque fois qu’il lance son éditeur, du jour où ils franchissent la porte jusqu’à ce que la société cesse de fonctionner. Entreprise.
Quelles sont les chances?
N'est-ce pas le plus gros " ne te répète pas " sur la planète?
la source
Je déplace mon ancienne réponse de non programmée à programmers.se, car les réponses semblent assez polarisées entre les sites.
la source
La question la plus importante est de savoir si une "couche" au-dessus de la base de données pense qu'elle est propriétaire des données. La simultanéité et l’intégrité des données sont des problèmes pour lesquels la solution est un SGBDR - certaines applications sont développées comme si la base de données n’était que leur sachet de bits personnel et bien sûr, elles finissaient par essayer de réinventer la roue de toutes sortes de façons, être irrémédiablement cassé dès qu'une autre application accède à la même base de données
la source
J'ai écrit ma réponse à cela dans mon blog . Ma conclusion est que le fait de le faire dans l’application n’évolue pas une fois que vous considérez le cycle de vie complet de l’application.
la source
Est-ce que le SQL fait des choses comme définir la logique et filtrer les résultats en fonction des applications? SQL est un merveilleux langage de manipulation d'ensembles.
En outre, comme l'a souligné GBN ci-dessus, le code SQL survivra presque universellement au code de l'application.
S'il est vrai que EF ou NHibernate ou LinqToSql vous permettront de générer du code plus rapidement, chaque programmeur digne de ce nom sait que seule l'optimisation du code SQL optimisera la récupération des données. Le SGBDR ne comprend que le SQL, vous devez donc tout transformer en SQL avant que tout soit dit et fait. (en supposant que nous puissions convenir que TSQL et PLSQL sont toujours du SQL)
la source
Un inconvénient dont les gens ne discutent pas nécessairement - les avantages ont été épuisés ici - est le coût.
Les processeurs sur le serveur de base de données sont souvent les processeurs les plus coûteux de toutes les organisations lorsqu’ils calculent le coût des licences logicielles. Le transfert de la logique métier vers le niveau de données doit donc être effectué de manière judicieuse, pas nécessairement de manière uniforme.
la source
C'est ici que la rencontre des esprits, c'est-à-dire des esprits des développeurs et des administrateurs de bases de données, doit inévitablement se produire. L'utilisation de Business Logic (BL) et le stockage de ce type dans une base de données peuvent avoir un impact qui peut glorifier ou horrifier sa mise en œuvre.
Pour certains produits de SGBDR, il existe des bibliothèques / outils / API de qualité supérieure pour la logique d'entreprise et les infrastructures d'objet que l'on pourrait rapidement apprendre et utiliser dans leurs applications. Pour les autres SGBDR, il n’existe pas de bibliothèques / outils / API.
Auparavant, les applications client / serveur établissaient le pont en BL via les procédures stockées (SP). Pour des produits tels qu'Oracle et SQL Server, cela a été fait tôt. Lorsque des bases de données open source telles que PostgreSQL et MySQL ont été créées, ceux qui les utilisaient risquaient d'innover avec les procédures stockées dans BL. PostgreSQL a mûri très rapidement dans ce domaine, car non seulement des procédures stockées ont été mises en œuvre, mais également la possibilité de créer des langages client. MySQL a pratiquement cessé d'évoluer dans le monde des procédures stockées et est apparu sous la forme d'un langage simplifié avec de nombreuses restrictions. Ainsi, quand il s'agit de BL, vous êtes complètement à la merci de MySQL et de son langage de procédure stockée.
Il ne reste en réalité qu'une seule question: quel que soit le SGBDR, le BL doit-il résider en tout ou en partie dans la base de données?
Pensez au développeur. Lorsque les choses tournent mal dans une application, le processus de débogage oblige le développeur à entrer et à sortir d'une base de données pour suivre les modifications de données qui peuvent ou non être correctes par intermittence. C'est comme coder une application C ++ et appeler du code Assembler au milieu. Vous devez basculer du code source, des classes et des structures vers des interruptions, des registres et des décalages AND BACK !!! Cette prise de débogage à ce même niveau.
Les développeurs peuvent peut-être concevoir une méthode d’exécution à grande vitesse de BL en conjonction avec des configurations de langage (drapeaux de compilation pour C ++, différents paramètres pour PHP / Python, etc.) via des objets métier conservés en mémoire plutôt que dans une base de données. Certains ont essayé de relier cette idéologie pour un code d'exécution plus rapide dans la base de données en écrivant des bibliothèques dans lesquelles le débogage des procédures stockées et des déclencheurs est bien intégré à la base de données et apparemment utilisable.
Ainsi, le développeur est mis au défi de développer, de déboguer et de maintenir le code source et le BL dans deux langues.
Maintenant, pensez à la DBA. L'administrateur de base de données souhaite que la base de données reste la plus légère possible dans les procédures stockées. L'administrateur de base de données peut voir dans BL un élément externe à la base de données. Pourtant, lorsque SQL appelle les données nécessaires pour BL, le SQL doit être simple et efficace.
Maintenant, pour la rencontre des esprits !!!
Le développeur code les SP et utilise les méthodes iteractive. DBA regarde le SP. DBA détermine qu'une seule instruction SQL peut remplacer les méthodes iteractive écrites par le développeur. Le développeur voit que l'instruction SQL suggérée par le DBA nécessite l'appel d'un autre code lié au BL ou à un SQL qui ne suit pas les plans d'exécution normaux de l'instruction SQL.
À la lumière de cela, la configuration, le réglage des performances et le codage SP deviennent une fonction de la profondeur et de l'intensité des données de BL pour la récupération des données. Plus le BL est profond et approfondi, plus il doit y avoir de développeurs et d'administrateurs de base de données sur la même page en ce qui concerne la quantité de données et la puissance de traitement attribuées à la base de données.
CONCLUSION
Le mode de récupération des données doit toujours impliquer les camps de développeur et de DBA. Des concessions doivent toujours être faites quant aux méthodes de codage et aux paradigmes d'extraction de données qui peuvent fonctionner ensemble, pour une vitesse et une efficacité optimales. Si la préparation des données à manipuler par le code source n’est effectuée qu’une fois avant que le code n’obtienne les données, le DBA doit dicter l’utilisation du code SQL simplifié et moyen. Si le BL est quelque chose avec lequel le DBA n'est pas en accord, les rênes sont alors entre les mains du développeur. C'est pourquoi l'administrateur de base de données doit se voir et faire partie de l'équipe de projet et non pas une île pour lui-même, tandis que le développeur doit laisser à l'administrateur de base de données le soin de peaufiner le code SQL s'il le justifie.
la source
C'est une bonne question à poser sur un site web rempli de DBA. Espérons que la plupart des réponses seront "pro" en faveur du maintien de la base de données dans un état ACID, et donc de la logique métier dans la base de données. :-)
En ce qui concerne mon opinion, je pense que vous devriez implémenter la logique métier dans vos applications et vos bases de données. Cette approche coûtera plus de temps et d’argent, mais je pense qu’elle aura ainsi une meilleure solution commerciale qualitative.
la source
Comme Adam Musch l'a dit plus haut, il y a plus à considérer ici pour la performance. L'utilisation du processeur. Utilisation de la mémoire.
Bloquez évidemment les mauvaises choses pour accéder à la base de données.
Lorsque vous approfondissez, vous devez prendre des décisions. Le serveur de base de données est un endroit très coûteux pour effectuer des tâches que le client pourrait facilement faire. exemple: formatage des données, formatage des dates, assemblage des chaînes, etc. côté client.
Est-ce que vous faites le calcul / le traitement chez le client ou sur le serveur de base de données? Pour moi, cela dépend de la complexité et du nombre d'enregistrements impliqués. La logique métier doit vraiment être réalisée dans la base de données afin que tout soit traité de la même manière.
Vous devez vraiment créer une API de vues pour lire et stocker les procs pour écrire les données dans la base de données afin de vous éviter des maux de tête à l'avenir.
Utilisez les forces de chaque extrémité à votre avantage.
la source