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).
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
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.