Abstractions, DDL, DML et SQL
DerniĂšre mise Ă jour
DerniĂšre mise Ă jour
Le SGBDR sert à nous abstraire une grande partie de la gestion de nos données.
Quand on accÚde ou modifie nos données, on aimerait pouvoir préciser le résultat souhaité sans s'occuper des détails de l'implémentation (comment faire).
Dans la vraie vie, quand on demande à quelqu'un de "préparer un gùteau au chocolat", nous le faisons de façon déclarative, c'est-à -dire, on a exprimé notre résultat désiré : le gùteau au chocolat.
Nous n'avons pas précisé comment préparer le gùteau, ni les étapes nécessaires pour le produire. Si on avait énuméré la recette, étape par étape, on l'aurait fait de maniÚre impérative.
Notre SGDBR aura les prĂ©tentions vers le rĂ©gime dĂ©claratif, et pour la plupart, on prĂ©fĂšre exprimer nous besoins finaux, au lieu des dĂ©tails dâexĂ©cution (il y aura, comme toujours, des exceptions !)
Pour satisfaire cette demande déclarative, le SGBDR est obligé de nous abstraire certaines parties de son implémentation. Par exemple, l'accÚs aux disques, y compris le format des fichiers qui stockent nos données, est totalement abstrait du point de vue de l'utilisateur du SGBDR.
Nous intervenons principalement sur le niveau logique en tant de concepteur, développeur ou opérateur d'un SGBDR. Avec le langage SQL, nous exprimons nos souhaits, sans s'occuper de l'accÚs physique aux données sur le disque.
Ceci nous donne de l'indépendance au stockage, ou Physical Data Independance.
Notre SGBDR nous abstrait donc beaucoup de dĂ©tails d'implĂ©mentation. En revanche, parfois, on se trouve dans la situation oĂč l'on ne rĂ©cupĂšre pas forcĂ©ment les donnĂ©es que l'on veut (nous nous exprimons mal nos besoins), ou la rĂ©cupĂ©ration prend trop de temps (la stratĂ©gie trouvĂ©e par le SGBDR pour satisfaire nos besoins n'est pas optimale), ou on essaye d'effectuer une opĂ©ration qui met en pĂ©ril la cohĂ©rence de nos donnĂ©es.
Pour s'en sortir, il est utile donc d'apprécier les différents niveaux d'abstraction, et penser à l'implémentation de chaque couche. De temps en temps, cette connaissance nous aide à débloquer un problÚme.
Par exemple, j'ai une requĂȘte SQL qui prend trop de temps. En Ă©tudiant le schĂ©ma dessus, je vois qu'il peut y avoir plusieurs endroits d'amĂ©lioration de ma requĂȘte :
Peut-ĂȘtre le compilateur DML a pris trop de temps pour parser la requĂȘte et formuler une stratĂ©gie de rĂ©cupĂ©ration des donnĂ©es ?
Peut-ĂȘtre j'ai demandĂ© trop de donnĂ©es pour la RAM disponible sur la machine, et donc je suis rentrĂ© dans un Ă©tat de pagination et thrashing__
Peut-ĂȘtre ma demande se repose sur les colonnes non indexĂ©s ? Peut-ĂȘtre le disque mĂȘme est de mauvaise performance ?
Nous distinguons entre les instructions de création de notre base de données, notamment en ce qui concerne le schéma de notre base, et les instructions d'accÚs et manipulation aux données.
Les instructions de création et modification d'un schéma composent le DDL, le data definition language.
A priori, le DDL est plutĂŽt impĂ©ratif dans sa nature, puisqu'on prĂ©cise, dans un ordre spĂ©cifique, comment mettre en place la structure de notre base. En mĂȘme temps, nous ne nous occupons pas des dĂ©tails de l'implĂ©mentation au niveau stockage, donc Ă un autre niveau, le DDL est quand mĂȘme dĂ©claratif.
Le DDL s'occupe des sujets suivants :
Préciser les relations (tables et colonnes)
Préciser le type de données
Préciser les contraintes sur les données pour avoir du sens
Conditions d'intégrité référentielle
Autorisation
On parle souvent d'un DDL pour le fichier contenant toutes les instructions pour créer une base de données. Normalement ce fichier contient les instructions SQL comme create table
, alter table
, drop table
, etc.
Ou bien query language. L'objectif est de faciliter lâaccĂšs aux donnĂ©es sans forcĂ©ment prĂ©ciser oĂč ni comment.
Le DML consiste Ă des instructions select
, insert
, update
, delete
SQL est le langage le plus globalement supporté pour la manipulation des données relationnelles. Ce langage avait pour ambition de pouvoir exprimer nos besoins de façon presque "naturelle".
Il est Ă la fois DDL, Ă la fois DML.;
En revanche, certaines marques de base de données se différencient dans les détails (notamment dans la partie DDL). Ex. MySQL vs Postgres SQL vs MariaDB vs Oracle etc.