Database
 sql >> Base de données >  >> RDS >> Database

Unités fonctionnelles


Introduction

Il existe deux écoles de pensée concernant l'exécution de calculs dans votre base de données :les personnes qui pensent que c'est génial et les personnes qui se trompent. Cela ne veut pas dire que le monde des fonctions, des procédures stockées, des colonnes générées ou calculées et des déclencheurs n'est que rose et soleil ! Ces outils sont loin d'être infaillibles, et des implémentations irréfléchies peuvent mal fonctionner, traumatiser leurs mainteneurs, et plus encore, ce qui explique en partie l'existence d'une controverse.

Mais les bases de données sont, par définition, très efficaces pour traiter et manipuler les informations, et la plupart d'entre elles mettent le même contrôle et la même puissance à la disposition de leurs utilisateurs (SQLite et MS Access dans une moindre mesure). Les programmes de traitement de données externes démarrent sur le dos en ayant à extraire des informations de la base de données, souvent sur un réseau, avant de pouvoir faire quoi que ce soit. Et là où les programmes de bases de données peuvent tirer pleinement parti des opérations d'ensemble natives, de l'indexation, des tables temporaires et d'autres fruits d'un demi-siècle d'évolution des bases de données, les programmes externes de toute complexité ont tendance à impliquer un certain niveau de réinvention de la roue. Alors pourquoi ne pas faire fonctionner la base de données ?



Voici pourquoi vous pourriez ne pas voulez programmer votre base de données !

  • Les fonctionnalités de la base de données ont tendance à devenir invisibles, en particulier les déclencheurs. Cette faiblesse évolue approximativement avec la taille des équipes et/ou des applications qui interagissent avec la base de données, car moins de personnes se souviennent ou sont conscientes de la programmation dans la base de données. La documentation aide, mais dans une certaine mesure.
  • SQL est un langage spécialement conçu pour manipuler des ensembles de données. Il n'est pas particulièrement bon pour les choses qui ne manipulent pas des ensembles de données, et il est moins bon à mesure que ces autres choses deviennent compliquées.
  • Les capacités RDBMS et les dialectes SQL diffèrent. Les colonnes générées simples sont largement prises en charge, mais le portage d'une logique de base de données plus complexe vers d'autres magasins prend au minimum du temps et des efforts.
  • Les mises à niveau de schéma de base de données sont généralement plus difficiles que les mises à niveau d'application. La logique en évolution rapide est mieux conservée ailleurs, bien qu'elle puisse valoir la peine d'être réexaminée une fois que les choses se stabilisent.
  • La gestion des programmes de base de données n'est pas aussi simple qu'on pourrait l'espérer. De nombreux outils de migration de schéma ne font que peu ou rien pour l'organisation, ce qui entraîne des comparaisons tentaculaires et des révisions de code onéreuses (les graphiques de dépendance de sqitch et le remaniement d'objets individuels en font une exception notable, et migra cherche à contourner complètement le problème). Lors des tests, des frameworks tels que pgTAP et utPLSQL améliorent les tests d'intégration en boîte noire, mais représentent également un engagement de support et de maintenance supplémentaire.
  • Avec une base de code externe établie, tout changement structurel a tendance à être à la fois exigeant en efforts et risqué.

D'autre part, pour les tâches auxquelles il est adapté, SQL offre vitesse, concision, durabilité et la possibilité de "canoniser" les flux de travail automatisés. La modélisation des données ne se limite pas à fixer des entités comme des insectes sur du carton, et la distinction entre données en mouvement et données au repos est délicate. Le repos est un mouvement vraiment plus lent dans une qualité plus fine; les informations circulent toujours d'ici à là, et la programmabilité de la base de données est un outil puissant pour gérer et diriger ces flux.

Certains moteurs de base de données divisent la différence entre SQL et d'autres langages de programmation en prenant également en charge ces autres langages de programmation. SQL Server prend en charge les fonctions écrites dans n'importe quel langage .NET Framework; Oracle a des procédures stockées Java; PostgreSQL autorise les extensions avec C et est programmable par l'utilisateur en Python, Perl et Tcl, avec des plugins ajoutant des scripts shell, R, JavaScript, etc. Pour compléter les suspects habituels, c'est SQL ou rien pour MySQL et MariaDB, MS Access est seulement programmable en VBA, et SQLite n'est pas du tout programmable par l'utilisateur.

L'utilisation de langages non SQL est une option si SQL est inadéquat pour certaines tâches ou si vous souhaitez réutiliser un autre code, mais cela ne vous permettra pas de contourner les autres problèmes qui font de la programmation de base de données une arme à plusieurs tranchants. Au contraire, le recours à ceux-ci complique davantage le déploiement et l'interopérabilité. Caveat scriptor :que l'écrivain se méfie.



Fonctions vs Procédures