• Aucun résultat trouvé

Le stockage, l'accès, et la manipulation de données sont des opérations vitales et critiques dans la plupart des applications. Les applications Web, statistiques, l'intelligence articielle, l'Internet des objets, tous doivent accéder à une grande quantité d'information stockée dans des sources de données hétérogènes.

Les applications sont écrites dans des langages de programmation généralistes souvent choisis en fonction de leur compatibilité avec un domaine spécique (par exemple, R ou Python pour l'analyse statistique ou la fouille de données, JavaS-cript pour la programmation Web). Ces langages de programmation sont sou-vent impératifs, ce qui signie que les utilisateurs de ces langages doisou-vent décrire comment accéder à la mémoire de l'ordinateur et la manipuler. Pour cela, les utilisateurs écrivent des séquences d'expressions, et chacune de ces expressions modient l'état du programme.

Les données, elles, sont stockées dans des bases de données gérées par des sys-tèmes de gestion de bases de données (SGBD). Ces syssys-tèmes gèrent le stockage, l'accès optimisé aux données en utilisant un langage de requêtes, la tolérance aux pannes, la modularité et la condentialité des données, et plus encore. Une ex-pression d'un langage de requêtes, appelée requête, décrit les données demandées au lieu de détailler comment y accéder, laissant au SGBD le soin de choisir la meilleure façon de procéder.

Pour accéder aux données stockées dans une base de données, une applica-tion envoie une requête à la base dans son langage de requêtes. Souvent, une application orientée données contient des composants qui jouent le rôle d'inter-face entre l'application et les diérentes bases de données cibles. Par exemple, une technique récente appelée polyglot persistence consiste à séparer les données nécessaires aux diérents composants d'une application dans diérents types de bases de données. Cela permet de tirer avantage des capacités des diérentes bases de données où elles sont les plus ecaces. La FigureA.1montre un exemple d'une

e-commerce application

Key-value database Document database RDBMS

User session Shopping cart User accounts Logs Inventory Financial data

Figure A.1  Exemple d'application utilisant diérents types de bases de données telle application.

Cette thèse est une étude dont le but est de créer une solution permettant aux développeurs d'applications d'écrire des requêtes sûres et ecaces sans avoir besoin d'être des experts dans les modèles de données et les langages de requêtes des bases de données ciblées.

Nous donnons ici un aperçu des langages de requêtes des bases de données, des langages de programmation utilisés dans le développement d'applications, et les solutions existantes pour interfacer ces deux mondes ainsi que les problèmes ren-contrés. Ensuite, nous décrivons une nouvelle solution sous la forme d'un nouveau framework de requêtes intégrées au langage appelée BOLDR.

A.2 SQL

SQL (Structured Query Language) est le langage de requêtes le plus populaire. C'est un langage dédié (ou domain-specic language en anglais) basé sur l'algèbre relationnelle.

A.2.1 Algèbre relationnelle

L'algèbre relationnelle créée par Edgar F. Codd [Cod70], dénit des opérations sur des données représentées comme des ensembles de n-uplets dans lesquels chaque élément correspond à un attribut dénoté par un nom. Les bases de données re-lationnelles appellent ces constructions des tables, composées de lignes et de co-lonnes. La Figure A.2montre des exemples de tables.

id name salary teamid

1 Lily Pond 5200 2

2 Daniel Rogers 4700 1 3 Olivia Sinclair 6000 1

(a) Table Employee

teamid teamname bonus

1 R&D 500

2 Sales 600

(b) Table Team

Figure A.2  Un exemple de données organisées en tables

La plupart des langages de requêtes des bases de données sont basés sur l'algèbre relationnelle [AHV95]. Les opérations les plus basiques de l'algèbre rela-tionnelle sont la projection, qui restreint les n-uplets à un ensemble d'attributs ; la sélection (ou restriction), qui ne conserve que les n-uplets satisfaisant une condi-tion ; et la jointure, qui renvoie l'ensemble des combinaisons de n-uplets provenant de deux tables dont les valeurs sont égales sur leurs attributs communs. La Fi-gureA.3montre des exemples d'applications de ces opérations sur des tables. La Figure A.3a montre la projection de la table People sur les attributs rstname et lastname, la Figure A.3b montre la sélection des n-uplets de la table People pour lesquels la valeur de l'attribut zipcode est 13000, et la Figure A.3c montre le résultat de la jointure entre les tables People et Team.

name salary Lily Pond 5200 Daniel Rogers 4700 Olivia Sinclair 6000

(a) Projection sur Employee

id name salary teamid

1 Lily Pond 5200 2

3 Olivia Sinclair 6000 1

(b) Sélection sur Employee

id name salary teamname bonus 1 Lily Pond 5200 Sales 600 2 Daniel Rogers 4700 Sales 600 3 Olivia Sinclair 6000 R&D 500

(c) Jointure entre Employee et Team

A.2.2 Exprimer des requêtes en SQL

SQLpermet d'utiliser les opérations de l'algèbre relationnelle dans un langage de programmation déclaratif. Au lieu de décrire étape par étape comment le calcul doit être fait pour obtenir le résultat désiré, la programmation en SQL consiste à décrire le résultat voulu. Pour cela, la syntaxe de SQL est faite pour se rapprocher d'un langage naturel. Par exemple, la projection de la FigureA.3apeut être écrite en SQL ainsi :

SELECT name, salary FROM Employee

oùSELECTreprésente la projection, etFROMreprésente l'opération sur les données

From qui renvoie le contenu d'une table à partir de son nom. La sélection de la Figure A.3bpeut être écrite :

SELECT * FROM Employee WHERE salary > 5000

où * signie toutes les colonnes. Enn, la jointure de la FigureA.3cpeut être écrite :

SELECT * FROM Employee NATURAL JOIN Team

ou encore :

SELECT * FROM Employee, Team WHERE Employee.deptno = Team.deptno

Comme le montre cette dernière requête, les noms des tables peuvent être utilisés comme les noms de la ligne courante de la table correspondante. Cela permet de lever l'ambigüité sur quelle n-uplet doit être accédé pour la valeur de la colonne. De plus, SQL permet la création d'alias pour donner un nom temporaire aux tables avec le mot-clé AS. Par exemple, notre dernière requête peut s'écrire :

SELECT * FROM Employee AS e, Team AS t WHERE e.deptno = t.deptno

Dans ce cas, les alias ne sont pas nécessaires puisque les noms de tables per-mettent déjà de distinguer les lignes, mais ils sont requis dans certaines requêtes comme les jointures entre une table et elle-même, ou pour donner un nom au résultat d'une sous-requête :

SELECT * FROM Employee e,

(SELECT 1 AS teamid, 'R&D' AS teamname, 500 AS bonus UNION ALL

SELECT 2 AS teamid, 'Sales' AS teamname, 600 AS bonus) AS t

Dans cette dernière requête, la sous-requêteUNION ALLcrée la table anonyme suivante :

teamid teamname bonus

1 R&D 500

2 Sales 600

qui est ensuite lié au nom t en utilisant un alias, et ce nom est alors utilisé dans la clause WHERE pour faire référence à la table.

La syntaxe simple de SQL est l'une des raisons de sa popularité, et de sa place comme le plus utilisé des langages de requêtes. La plupart des bases de données sont compatibles avec SQL, même celles qui n'ont pas un modèle de données directement adapté pour l'algèbre relationnelle. Par conséquent, SQL est un langage de base de données indispensable pour l'étude de solutions dont le but est de permettre aux programmeurs d'envoyer des requêtes aux bases de données.

Documents relatifs