L’état du langage de requête structuré (SQL) en 2019

En 1974, Abba remporte le concours Eurovision de la chanson avec “Waterloo”. Cette même année a vu la naissance du langage de requête structuré (SQL). Créé comme un langage standardisé pour la gestion de bases de données relationnelles, il a énormément simplifié le développement d’applications métier complexes. Par exemple, vous pouvez récupérer plusieurs enregistrements de données dans une instruction sans spécifier comment accéder à ces données.

Ayant passé 19 des 20 dernières années à travailler avec des bases de données relationnelles et une grande partie de l’année écoulée à écrire du code pour accéder à une base de données hiérarchique, je peux apprécier la facilité que SQL offre aux développeurs. L’équivalent d’une requête SQL de deux ou trois lignes avec des jointures entre les tables peut devenir 20 à 30 lignes de code dans une base de données hiérarchique.

En ce qui concerne les langages, SQL est un peu un méli-mélo de programmation déclarative et procédurale. Vous pouvez déclarer les bases de données et les tables, puis les modifier dans le code, ainsi qu’insérer/mettre à jour des données.

Bien qu’il existe différentes normes, divers créateurs de bases de données ont ajouté leurs propres extensions, Microsoft et Oracle étant parmi les pires contrevenants (pour ne pas dire plus). Si vous êtes déjà passé de MS Access à SQL Server, il y a des changements subtils (et pas si subtils) ; par exemple, l’utilisation de “dans Access devient” dans SQL Server. Les données ne sont pas exactement cloisonnées, mais le déplacement de quantités non négligeables de données entre différentes marques de base de données peut nécessiter un effort considérable.

Certains développeurs considéraient le mouvement NoSQL, qui a débuté en 2009, comme un éventuel remplacement de SQL. Mais cela vient en fait de résoudre un problème différent : comment stocker rapidement plusieurs enregistrements. Les bases de données relationnelles ont ACID (atomicité, cohérence, isolation et durabilité), qui ajoutent une surcharge de traitement que NoSQL évite. Le prix de la vitesse de NoSQL est la cohérence, qui est remplacée par une cohérence éventuelle (s’il n’y a pas de nouvelles mises à jour de l’objet après la fin de la période d’incohérence possible, tous les accès renverront la dernière valeur mise à jour).

SQL, ayant résisté à la tempête NoSQL, continue d’être révisé, avec le dernier amendement (le 8) en 2016. Il a fallu 12 ans pour que le langage devienne un standard (en 1986) ; le premier amendement date de 1989. La plupart des développements que j’ai effectués depuis 1998 ont été contre les bases de données SQL-89 et SQL-92, malgré les nouvelles versions depuis. Les choses changent lentement dans le monde du développement logiciel !

Bases de données SQL et relationnelles

Vous ne pouvez pas discuter de SQL sans faire référence aux bases de données qui l’exécutent.

Quelles versions de SQL les principales bases de données prennent-elles en charge ? Je regarde Oracle, SQL Server, IBM DB2, PostgreSQL et MySQL/MariaDB. SQLite est inclus dans chaque appareil Android et iOS, ce qui en fait la plus grande base de données au monde.

Oracle, bien qu’il ne soit pas tout à fait la première base de données relationnelle commerciale, est le plus populaire actuellement et considéré comme celui à battre. Selon Db-Engines, c’est toujours la base de données relationnelle la plus populaire, suivie de près par MySQL, puis SQL Server. Oracle prend en charge SQL:2011 et la correspondance des modèles de ligne à partir de 2016.

L’autre base de données d’Oracle, MySQL, a été acquise avec les microsystèmes Sun en 2008. Certains pensaient que MySQL pourrait ne pas survivre à la transition, y compris son auteur principal (Monty Widenius, qui a créé le fork MariaDB). MySQL prend en charge une partie de SQL-2011.

Non loin derrière Oracle/MySQL se trouve Microsoft SQL Server, qui est apparu il n’y a pas si longtemps sur Linux. Ce transfert était une tâche techniquement difficile, car SQL Server utilisait traditionnellement les bibliothèques Windows pour le threading/planification, la synchronisation et les E/S (disque et réseau). L’équipe a accompli ce transfert en ajoutant une couche d’abstraction de plate-forme. Il est livré avec les mêmes licences que les éditions Windows et développeur/Express, ainsi que les éditions standard et Enterprise.

Le Db2 d’IBM n’est pas celui que j’ai personnellement utilisé ; mais selon leur site Web, il prend en charge de nombreuses normes SQL: 2016. Il existe un certain nombre de versions différentes, dont deux éditions communautaires express (c’est-à-dire gratuites). Db2 est une autre base de données SQL qui peut stocker des documents JSON (comme No-SQL) et ce depuis cinq ans.

Juste pour être clair, DB2 n’est pas le même que Db2. IBM Db2 est le successeur (introduit en 2017) de DB2, qui existe depuis trois décennies.

PostgreSQL arrive au quatrième rang du classement Db-Engines. Cela a toujours été le SGBDR open source le plus avancé techniquement. PostgreSQL 11, la dernière version, prend en charge la plupart des fonctionnalités de SQL:2011. Si vous voulez un SGBDR sophistiqué, PostgreSQL est sans doute le meilleur, certainement pour le prix ! Les versions Express des bases de données commerciales sont généralement limitées dans la taille de la base de données qu’elles peuvent gérer ; PostgreSQL ne l’est pas.

J’aime SQLite. C’est petit, rapide et pratique à intégrer dans un logiciel de bureau. Sa taille est également inférieure à 700 Ko. Il prend en charge la plupart de SQL-92 et c’est tout, hélas.

conclusion

Selon db-engines, la cinquième base de données classée est désormais MongoDB. Cela montre que, même après neuf ans de bases de données NoSQL, les bases de données relationnelles restent néanmoins les meilleures. J’attribue une partie de cela à l’inertie, et un peu à certaines bases de données relationnelles ajoutant des capacités NoSQL. PostgreSQL et MySQL prennent tous deux en charge JSON. Il est beaucoup plus facile de conserver votre base de données relationnelle existante si elle prend en charge NoSQL.

Leave a Comment