+ All Categories
Home > Documents > bdrelationnelles.pdf

bdrelationnelles.pdf

Date post: 04-Mar-2016
Category:
Upload: bihmanos
View: 39 times
Download: 1 times
Share this document with a friend

of 57

Transcript
  • CPGEINFORMATIQ

    UECOMMUNE

    Introduction auxBases de DonnesRelationnelles

    Serge AbiteboulInria, ENS Cachan, Conseil national du numrique

    [email protected]

    Benjamin NguyenUniversit de Versailles St-Quentin-en-Yvelines, Inria

    [email protected]

    Yannick Le BrasMathmatiques MPSI, Lyce Montesquieu, Le Mans

    [email protected]

  • 2

  • Logic is the beginning of wisdom, not the end.Mr. Spock, Star Trek

    3

  • 4

  • Table des matires

    1 Introduction 71.1 Les principes et larchitecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2 Le calcul et lalgbre relationnels . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3 Loptimisation de requte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.4 Les transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.5 Conception dune Base de Donnes . . . . . . . . . . . . . . . . . . . . . . . . . 141.6 Notions du programme officiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    2 Le Calcul Relationnel 172.1 Objectif du chapitre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.2 Concepts des Bases de Donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.2.1 Dfinitions et Notations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.3 Calcul conjonctif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    2.3.1 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.3.2 Formules bien-formes du calcul conjonctif . . . . . . . . . . . . . . . . . . 202.3.3 Exercices corrig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.3.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    2.4 Calcul relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.4.1 Formules bien-formes du calcul relationnel . . . . . . . . . . . . . . . . . 232.4.2 Exercices corrigs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.4.3 Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    3 LAlgbre Relationnelle 273.1 Objectif du chapitre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.2 Algbre conjonctive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.3 Algbre relationnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.4 Thorme dEquivalence de Codd . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    4 SQL et Requtes Agrgat 334.0.1 Objectif du chapitre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    4.1 Le langage de dfinition de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . 334.2 Le langage de manipulation de donnes . . . . . . . . . . . . . . . . . . . . . . . 354.3 Linterrogation des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    4.3.1 La syntaxe SQL du SELECT, FROM, WHERE . . . . . . . . . . . . . . . 364.3.2 Traduction en calcul relationnel . . . . . . . . . . . . . . . . . . . . . . . . 374.3.3 Traduction en algbre relationnelle . . . . . . . . . . . . . . . . . . . . . . 374.3.4 Exemple de requtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    4.4 Requtes agrgats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.5 Requtes ensemblistes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.6 Tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    5

  • TABLE DES MATIRES

    5 Exercices 415.1 Objectif du chapitre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.2 Activits du Programme Officiel . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    5.2.1 Installation du SGBD MySQL, du serveur web Apache, de lapplicationPHPMyAdmin et de la BD banque-simple . . . . . . . . . . . . . . . . . . 42

    5.2.2 De la prsentation des exercices . . . . . . . . . . . . . . . . . . . . . . . . 475.2.3 Mthodologie pour rpondre une question . . . . . . . . . . . . . . . . . 485.2.4 Requtes sur une base de donnes existante . . . . . . . . . . . . . . . . . 49

    5.3 Corrigs des exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525.4 Exercices hors programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    6

  • 1 IntroductionNous allons parler de systmes informatiques qui nous aident grer des donnes. Nous avons

    donc, dun ct, un serveur de donnes quelque part sur la Toile, avec des disques magntiques 1 etleurs pistes qui gardent prcieusement des squences de bits, des structures daccs compliquescomme des index ou des arbres-B, des hirarchies de mmoires avec leurs caches et, de lautre,un utilisateur. Supposons que le serveur soit celui dIMDb qui gre une base de donnes sur lecinma. Supposons que lutilisateur, disons Alice, veuille savoir quels films ont t raliss parAlfred Hitchcock. Pour ce faire, elle spcifie des mots-cls ou remplit les champs dun formulairepropos par IMDb. Sa question voyage depuis son navigateur jusquau serveur de donnes. L,cette question est transforme en un programme peut-tre complexe qui sexcute pour obtenirla rponse. Ce qui est important : ce programme, Alice na pas envie de lcrire ; elle na pas lcrire.

    Le systme lmentaire qui permet de grer des donnes est un systme de fichiers. Un fichierest une squence de bits qui peut reprsenter une chanson, une photo, une vido, un courriel, unelettre, un roman, etc. Votre ordinateur personnel et votre tlphone stockent leurs donnes dansdes systmes de fichiers. Et parfois quand vous ne savez plus o vous avez mis quelque chose, vousfaites des recherches dans ces systme de fichiers. Cest rudimentaire. Un moteur de recherchede la Toile ne fait pas autre chose, seulement il le fait sur un systme de fichiers lchelle de laplante. Dans ce chapitre, nous parlerons de systmes qui grent aussi des donnes mais qui sontbien plus sophistiqus que les systmes de fichiers : les systmes de gestion de bases de donnes.Ce sont des logiciels complexes, rsultats de dizaines dannes de recherche et de dveloppement.Ils permettent des individus ou des programmes dexprimer des requtes pour interroger desbases de donnes ou pour les modifier. Nous nous focaliserons ici sur les plus rpandus dentreces systmes, les systmes relationnels, parmi lesquels nous trouvons des logiciels commerciauxtrs rpandus comme celui dOracle et des logiciels libres trs utiliss comme MySQL.

    Dans ce livre, nous couvrons le programme des classes prparatoires scientifiques, toutefoisil nous est paru indispensable daller au del dune interprtation stricte du programme, pourpermettre au lecteur de comprendre les fondements de la thorie des bases de donnes, sanslaquelle il ne serait quun simple utilisateur de SGBD. Nous indiquons les lments qui sont la limite du programme par la notation , et ceux qui sont au del par la notation .

    1.1 Les principes et larchitectureAu fil des ans, trois grands principes ont merg qui ont faonn le domaine de la gestion de

    donnes :

    Abstraction : Un systme de gestion de bases de donnes sert de mdiateur entre des

    1. lheure actuelle, un nombre croissant de serveurs utilisent dsormais des disques bass sur de la mmoireFlash, appels Solid State Drive (SSD). Les travaux historiques sur les systmes de gestion des bases de donns fontlhypothse de lutilisation de disques magntiques. Loptimisation des SGBD aux disques SSD est du domainede la recherche actuel (voir [?]).

    7

  • 1CHAPITRE 1. INTRODUCTION

    (a) ClientServeur (b) Trois Tiers (c) Base de donnes dans les nuages

    Figure 1.1 Architectures principales

    individus et des machines. Pour mieux sadapter aux individus, il doit organiser et prsenterles donnes de faon intuitive et permettre de les manipuler en restant un niveau abstraitsans avoir considrer des dtails dimplmentation.

    Indpendance : nous distinguons trois niveaux, physique, logique et externe, que lon es-saie de rendre le plus indpendants possible. Au niveau externe, nous trouvons les vuesdutilisateurs particuliers qui partagent la base de donnes. Chaque vue est adapte auxbesoins de lutilisateur. Au niveau logique, nous trouvons une organisation unique des don-nes typiquement dans le modle relationnel que nous dtaillons plus loin. Et au niveauphysique, les dtails de lorganisation sur disque et de structures comme des index dontle rle est dacclrer les calculs. Le but est de pouvoir modifier un niveau (par exemple,ajouter un nouvel utilisateur avec de nouveaux besoins) sans modifier les autres niveaux.

    Universalit : Ces systmes visent capturer toutes les donnes dune entreprise, dungroupe, dune organisation quelconque, pour tout type dapplications. Il leur faut doncoffrir des langages de dveloppement dapplications puissants et une gamme de fonction-nalits trs riche. Des limites de cette universalit existent aujourdhui pour les systmesrelationnels : normment de donnes moins structures sont par exemple gres dans dessystmes de fichiers.

    Mentionnons brivement les architectures les plus rpandues de systmes de gestion de don-nes. Voir Figure ??. Une premire architecture est celle des systmes client/serveur. La base dedonnes est gre sur un serveur. Lapplication tourne sur une autre machine, le client. De plusen plus, cette architecture se complique avec lintroduction dun troisime tiers (ce qui signifieen ralit niveau en anglais), une machine qui gre linterface, typiquement un navigateur Websur une tablette ou un laptop.

    Nous pouvons noter diffrentes volutions gnres par des amliorations dans les matrielsdisponibles : laccroissement des performances notamment fondes sur les mmoires vives de plus en

    plus massives, et des mmoires flash encore plus massives ;

    8

  • CHAPITRE 1. INTRODUCTION

    1

    Film SanceTitre Ralisateur Acteur Titre Salle HeureCasablanca M. Curtiz Humphrey Bogart Casablanca Lucernaire 19 :00Casablanca M. Curtiz Peter Lore Casablanca Studio 20 :00Les 400 coups F. Truffaut J.-P. Leaud Star Wars Sel 20 :30Star Wars G. Lucas Harrison Ford Star Wars Sel 22 :15

    Figure 1.2 Une base de donnes relationnelles

    lutilisation de plus en plus de paralllisme massif dans des grappes de machines pourtraiter dnormes volumes de donnes. On parle parfois de big data ;

    pour simplifier la gestion de donnes, on tend la dporter dans les nuages (le cloud),cest--dire mettre ses donnes dans des grappes de machines gres par des spcialistescomme Amazon.

    1.2 Le calcul et lalgbre relationnelsUn systme de gestion de bases de donnes doit aussi proposer un langage, pour exprimer des

    requtes, facilement utilisable par des tres humains. Ces exigences forment le point de dpartdu modle relationnel [Cod70, AHV95] propos par Ted Codd, un chercheur dIBM, dans lesannes 1970. Des mathmaticiens avaient dvelopp la fin du 19e sicle (bien avant linventionde linformatique et des bases de donnes) la Logique du premier ordre, pour formaliser le langagedes mathmatiques. Codd a eu lide dadapter cette Logique pour dfinir un modle de gestionde donnes, le modle relationnel.

    Dans le modle relationnel, les donnes sont organises en tableaux deux dimensions quenous appellerons des relations. la diffrence des mathmaticiens, nous supposons les relationsde taille finie. Comme illustration, nous utiliserons une base de donnes consistant en une relationFilm et une relation Sance (voir Figure 1.2). Une ligne de ces relations est appele un n-uplet(ou tuple en anglais). Par exemple, Star Wars, Sel, 22 :15 est un n-uplet darit 3, cest--dire un triplet, dans la relation Sance. Les colonnes ont des noms, appels attributs, commeTitre. Un n-uplet est not de la manire suivante : Casablanca, M. Curtiz, umphreyBogart

    Les donnes sont interroges en utilisant comme langage le calcul relationnel. Le calculrelationnel (trs fortement inspir de la Logique du premier ordre) sappuie sur des noms quireprsentent des relations comme Film ou Sance, des entres de ces relations comme StarWars, des variables comme t, h, et des symboles logiques, (et), (ou), (non), (implique), (existe), (pour tout). partir de ces ingrdients, des formules logiques peuvent tre construitestelles que :

    qHB = t, r; (Film(t, r, Humphrey Bogart) Sance(t, s, h))Si cela vous parait cryptique, en franais, cela se lit : il existe un titre t et un ralisateur r

    tels que le n-uplet t, r, Humphrey Bogart se trouve dans la relation Film, et le n-uplet t, s, h dans Sance. Observez que s et h ne sont pas quantifies dans la formule prcdente ;nous dirons que ces deux variables sont libres. La formule qHB peut tre vue comme une requtedu calcul relationnel. Elle se lit alors : donnez-moi les salles s et les horaires h, sil existe unralisateur r et un titre t tels que... En dautres termes,

    O et quelle heure puis-je voir un film avec Humphrey Bogart ?. Pour faciliter la lisibilitde ces formules logiques, on peut exprimer une requte en dfinissant prcisment la forme dun-uplet (nomm res dans la suite du document) en lui affectant les variables libres que loncherche obtenir, ce qui est implicite dans lexpression prcdente :

    9

  • 1CHAPITRE 1. INTRODUCTION

    {res(s, h)| t, r; (Film(t, r, Humphrey Bogart) Sance(t, s, h)}Lintrt de ce procd est quon peut ensuite rutiliser les n-uplets rsultats exactement

    comme sil sagissait dune relation. Cest ce quon appelle le mcanisme des vues. Une vue estune relation, qui au lieu dtre stocke dans la base de donnes, est dfinie intentionnellement.Un utilisateur de la base de donnes peut lutiliser comme nimporte quelle autre relation.

    Ce langage, le calcul relationnel, que nous prsentons en Chapitre 2 permet dexprimer desquestions dans une syntaxe qui vite les ambiguts de nos langues naturelles. Si elles pouvaientaimer, les machines aimeraient la simplicit et la prcision du calcul relationnel. En pratique,elles utilisent le langage SQL (pour Structured Query Language) qui exprime diffremment lesmmes questions. Par exemple la question prcdente sexprime en SQL comme :SELECT salle, heureFROM Film, SeanceWHERE Film.titre = Seance.titre AND acteur= "Humphrey Bogart"

    Cest presque comprhensible. Non ? Et quAlice sexprime en franais ou quelle utilise uneinterface graphique, le systme transforme sa question en requte 2 SQL. Nous prsentons lelangage SQL au Chapitre 4.

    La requte (question) du calcul relationnel prcdente (ou en SQL) prcise bien ce quAlicedemande. Cette question a un sens prcis : une smantique. Elle dfinit 3 une rponse, un en-semble de n-uplets. Ce que la question ne dit pas cest comment calculer la rponse. Pour lecomment, on utilise lalgbre relationnelle introduite par Codd, et que nous prsentons en Cha-pitre 3. Une tape importante consiste transformer une question du calcul en une expressionalgbrique qui permet de calculer la rponse cette question.

    Lalgbre relationnelle consiste en un petit nombre doprations de base qui, appliques des relations, produisent de nouvelles relations. Ces oprations peuvent tre composes pourconstruire des expressions algbriques de plus en plus complexes. Pour rpondre la questionqui nous sert dexemple, il nous faudra trois oprations, la jointure, la slection et la projection,que nous composerons dans lexpression suivante de lalgbre relationnelle :

    EHB = pisalle,heure(pititre(acteur=Humphrey Bogart)(Film)) 1 Sance)

    Nous pourrons suivre lvaluation de cette expression algbrique en Figure 1.3. Loprationde slection, dnote , filtre une relation, ne gardant que les n-uplets satisfaisant une condition,ici acteur = Humphrey Bogart. Lopration de projection, dnote pi, permet aussi de filtrerde linformation dune relation mais cette fois en liminant des colonnes. Lopration peut-trela plus exotique de lalgbre, la jointure, dnote 1, combine des n-uplets de deux relations.Dautres oprations non illustres ici permettent de faire lunion et la diffrence entre deux rela-tions ou de renommer des attributs. La puissance de lalgbre relationnelle tient de la possibilitde composer ces oprations. Cest ce que nous avons fait dans lexpression algbrique EHB quipermet dvaluer la rponse la question qHB.

    Notre prsentation est rapide mais il est important que le lecteur comprenne lintrt delalgbre. Nous reviendrons l dessus plus en dtail au Chapitre 3. En effet, il est relativementsimple dcrire un programme qui value la rponse une question du calcul relationnel. Il estplus dlicat dobtenir un programme qui calcule cette rponse efficacement. Lalgbre relation-nelle dcoupe le travail. Un programme particulier trs efficace peut tre utilis pour chacunedes oprations de lalgbre ; le rsultat est obtenu en composant ces programmes. Lefficacitprovient notamment de ce que les oprations considrent des ensembles de n-uplets plutt queles n-uplets un un.

    2. SQL va plus loin que le calcul relationnel. Par exemple, il permet dordonner les rsultats et dappliquerdes fonctions simples comme la somme ou la moyenne.

    3. Nous ne prciserons pas comment dans ce cours.

    10

  • CHAPITRE 1. INTRODUCTION

    1

    Salle

    Titre= Harry Po0er

    Film

    salle,heure

    Salle

    Titre= Harry Po0er

    Film

    salle,heure

    Salle

    Titre= Harry Po0er

    Film

    salle,heure

    xjoin

    I N D E X

    (a) (b) (c)

    Figure 1.3 Des plans dexcution algbriques

    Le Thorme de CoddCodd a dmontr le thorme suivant :

    Thorme 1.2.1. [Codd] : une question est exprimable en calcul relationnel si et seulement sielle peut tre value avec une expression de lalgbre relationnelle, et il est facile de transformerune requte du calcul en une expression algbrique qui value cette requte.

    Que nous apprend ce thorme ? Pas grand-chose du point de vue des mathmatiques. Lecalcul relationnel est emprunt aux logiciens. Une algbrisation (lgrement diffrente) avaitmme dj t propose par Tarski. Mais dun point de vue informatique, Codd a pos lesbases de la mdiation autour des donnes entre individus et machines. Grce son rsultat,nous savons que nous pouvons exprimer une question en calcul relationnel, quun systme peuttraduire cette question en expression algbrique et calculer efficacement sa rponse. Pourtant,quand Codd proposa cette approche, la raction des ingnieurs qui graient alors de gros volumesde donnes et de grandes applications, fut unanime : trop lent ! a ne passera pas lchelle.Ils se trompaient. Pour traduire lide de Codd en une industrie de milliards de dollars, ilmanquait loptimisation de requte. Aprs des annes deffort, les chercheurs sont parvenus fairefonctionner les systmes relationnels avec des temps de rponse acceptables. Avec ces systmes,le dveloppement dapplications grant des donnes devenait beaucoup plus simple ; cela setraduisait par un accroissement considrable de la productivit des programmeurs dapplicationsgrant des gros volumes de donnes.

    1.3 Loptimisation de requteIl existe une infinit dexpressions algbriques qui valuent une mme requte. Si elles sont

    syntaxiquement diffrentes, elles dfinissent la mme question. Dun point de vue smantique,elles sont quivalentes. Optimiser une requte consiste la transformer en une autre qui donneles mmes rponses, mais qui soit la moins coteuse possible (typiquement en temps). Dun point

    11

  • 1CHAPITRE 1. INTRODUCTION

    de vue pratique, il nous faut choisir un plan dexcution, cest--dire une expression algbriqueavec des prcisions sur lalgorithme utiliser pour valuer chacune des oprations. Un plan dex-cution, cest quasiment un programme pour calculer la rponse. Un premier problme est quelespace de recherche, cest--dire lespace dans lequel nous voulons trouver le plan dexcution,est gigantesque. Pour viter de le parcourir entirement, nous allons utiliser des heuristiques,cest--dire des mthodes qui, si elles ne garantissent pas de trouver le plan optimal, donnentassez rapidement des plans satisfaisants. Ces heuristiques utilisent souvent des rgles de bon senscomme : il faut raliser les slections le plus tt possible. Lautre difficult est que pour choisir leplan le moins chronophage, loptimiseur (cest--dire le programme en charge de loptimisation)doit tre capable destimer le cot de chaque plan candidat et cest une tche complexe laquellele systme ne peut se permettre daccorder trop de ressources. Donc, loptimiseur fait de sonmieux. Et typiquement les optimiseurs de systmes comme Oracle ou DB2 font des merveillessur des requtes simples. Cest bien moins glorieux pour les requtes complexes, par exemplemettant en jeu des quantificateurs universels comme la question : quels sont les acteurs qui nontjou que dans des comdies ? Heureusement, en pratique, la plupart des questions poses pardes applications utilisant des bases de donnes sont simples.

    Sous-jacent dans la discussion sur loptimisation de requte est la question de la difficultdobtenir une certaine information. Nous rencontrons la notion de complexit. Depuis Gdel,nous savons quil est des propositions qui ne peuvent tre ni dmontres ni rfutes, quil est desproblmes qui ne peuvent tre rsolus. Cette notion dindcidabilit commence pniblement arriver jusquau grand public. Ce mme public ne voit dans le fait quune requte prend plus oumoins longtemps que des raisons purement techniques. Evidemment, le temps de calcul dpendde la puissance du serveur, de la vitesse du disque ou de la qualit de loptimiseur. Mais au-delde tels aspects, il est des tches qui demandent intrinsquement plus de temps que dautres.Par exemple, nous pouvons facilement afficher un graphe avec 100 noeuds ; a ne prend quequelques fractions de secondes. Par contre, cela prendrait normment de temps dafficher unaprs lautre tous les graphes possibles reliant ces 100 noeuds. Mme parmi les problmes dontla rponse est courte (par exemple, la rponse est oui ou non), il en est qui, bien que dcidables,sont intrinsquement bien plus complexes que dautres ; il en est mme que nous ne savonspas rsoudre en temps raisonnable. Parfois, cette difficult trouve mme son utilit. Le systmecryptographique RSA repose sur le fait que nous ne savons pas factoriser (en gnral) un trsgrand entier en nombres premiers, en un temps raisonnable et quil est donc trs difficile dedcrypter un message sans en connatre la cl secrte.

    La complexit est un aspect particulirement important pour le traitement de gros volumesde donnes. Pour une requte particulire, nous voulons savoir :

    quel temps il faut pour la raliser ? complexit en temps, quel espace disque (ou quelle mmoire) est ncessaire ? complexit en espace.

    Evidemment ces quantits dpendent de la taille de la base de donnes. Si la requte prendun temps t et que nous doublons la taille n de nos donnes, nous faut-il attendre le mme temps(temps constant), le double de temps (temps linaire en n), ou est-ce que le temps grandit demanire polynomiale (en nk o n est la taille des donnes) voire exponentielle (en kn) ? Ce nestpas anodin : sur de gros volumes de donnes, une complexit en temps nk exigera une grossepuissance de calcul, et une complexit en kn sera rdhibitoire.

    De nombreuses classes de complexit ont t tudies. Intuitivement, une classe de com-plexit regroupe tous les problmes qui peuvent tre rsolus sans dpasser certaines ressourcesdisponibles, typiquement le temps ou lespace. Par exemple, vous avez peut-tre entendu par-ler de la classe P, temps polynomial. Il sagit de lensemble des problmes quil est possible dersoudre dans un temps nk o n est la taille des donnes et k un entier arbitraire. Au-del deP, nous atteignons les temps NP (pour non-dterministe polynomial 4) et EXPTIME (temps

    4. Un exemple de problme difficile dans NP est celui du voyageur de commerce. Etant donnes des villes, des

    12

  • CHAPITRE 1. INTRODUCTION

    1

    exponentiel), des temps prohibitifs ? Pourtant, il faut relativiser. Les systmes informatiquesrsolvent routinirement des problmes parmi les plus complexes de NP. Et, a contrario, pour1.5 traoctets de donnes, n3 est encore aujourdhui hors datteinte, mme en disposant de tousles ordinateurs de la plante.

    Avant de poursuivre sur dautres aspects du modle relationnel, interrogeons-nous sur lesorigines de lnorme succs des systmes relationnels :

    les requtes sont fondes sur le calcul relationnel, un langage logique, simple et compr-hensible pour des humains surtout dans des variantes comme SQL ;

    une requte du calcul relationnel est facilement traduisible en une expression de lalgbrerelationnelle simple valuer pour des machines ;

    il est possible doptimiser lvaluation dexpressions de lalgbre relationnelle car cettealgbre noffre quun modle de calcul limit ;

    enfin, pour ce langage relativement limit, le paralllisme permet de passer lchelle detrs grandes bases de donnes.

    Pour insister sur les deux derniers points qui sont essentiels, nous pourrions choisir pour lesbases de donnes le slogan : ici on ne fait que des choses simples mais on les fait vite.

    Continuons avec un aspect essentiel de la gestion de donnes, mais qui est hors programme :les transactions.

    1.4 Les transactionsLa modernisation des chanes de fabrication a t principalement cause dans un premier

    temps par llectronique et lautomatique. Avant de simposer aussi dans la production, linfor-matique a elle profondment pntr lindustrie en modifiant radicalement la manire dont destransactions, comme les commandes ou la paye, taient gres de manire automatique. Unetransaction informatise est la forme dmatrialise dun contrat. Son cot peut se trouver in-comparablement plus faible que celui dune transaction relle mettant en jeu des dplacements depersonnes sur des chelles de temps bien plus longues. Avec des fonctionnalits considrablementlargies par le recours linformatique, les transactions se retrouvent au cur de nombreusesapplications qui ont largement contribu populariser les systmes relationnels comme, parexemple, les applications bancaires.

    Les systmes relationnels rpondent aux besoins des transactions en supportant la notion detransaction relationnelle. Une transaction relationnelle garantit quune squence doprations seralise correctement, par exemple en empchant quune somme dargent ne svanouisse dans lanature (avec un compte en banque dbit sans quun autre ne soit crdit). Mme loccurrencedune panne 5 ne doit pas pouvoir conduire une excution incorrecte. Il nous faut donc forma-liser la notion dexcution correcte. Evidemment, il serait impossible de le faire prcisment silfallait tenir compte des millions de choses que font de tels systmes. Mais linformatique, commeles mathmatiques, dispose dun outil fantastique : labstraction. Nous pouvons considrer ceque fait un systme relationnel sous langle des transactions relationnelles et des modificationsquelles apportent aux donnes, en faisant abstraction de toutes les autres tches quil ralise. Ildevient alors possible de dfinir formellement la notion dexcution correcte.

    Nous pouvons mentionner dautres tches que les systmes relationnels accomplissent cotde lvaluation de requtes et de la gestion de transactions relationnelles. Ils grent galement :

    les contraintes dintgrit (telles que tout responsable de projet doit tre enregistr dans labase des personnels) ;

    routes entre ces villes, et les longueurs de ces routes, trouver le plus court chemin pour relier toutes les villes.5. Les applications qui tournent sur le systme relationnel contiennent des bogues. Le systme lui-mme

    contient ses propres bogues. Enfin les matriels peuvent dysfonctionner.

    13

  • 1CHAPITRE 1. INTRODUCTION

    les dclencheurs ou triggers (tels que si quelquun modifie la liste des utilisateurs, envoyerun message au responsable de la scurit) ;

    les droits des utilisateurs (pour contrler qui a le droit de lire ou de modifier quoi) ; les vues (pour sadapter aux besoins dutilisateurs particuliers) ; larchivage (pour pouvoir retrouver des donnes primes depuis des lustres) ; le nettoyage des donnes (pour liminer les doublons, les incohrences).

    1.5 Conception dune Base de DonnesNous ne discuterons pas non plus dans ce document dun autre aspect trs important qui

    est la conception dune base de donnes, dun point de vue abstrait. En effet, si le programmeofficiel utilise le terme de conception dun schma relationnel, le travail de conception de lastructure de la base passe en gnral par un modle beaucoup plus abstrait, nomm ModleEntit-Association (E-A), qui a t introduit par Chen dans [Che76] en 1976. Ce modle est unmodle gnral de conception, qui peut tre traduit ensuite dans le modle relationel ou dansun autre modle (par exemple objet). Lui sont associes des mthodologies de conception, cest--dire des rgles qui permettent en principe dobtenir, partir dune situation de la vie rellequon souhaite modliser, un modle correct. Lintrt du modle E-A est quil est plus intuitifque le modle relationel, ne ncessite pas de comptences mathmatiques et se prte bien une prsentation graphique. Il est donc utilis pour changer avec des personnes du mtier quonsouhaite informatiser.

    1.6 Notions du programme officielLe programme officiel de CPGE est dfini de la manire suivante, et pse pour 15% de la

    premire anne, soit environ 6 semaines, dcoup en 6 sances d1h de cours (prfrablement 3sances de 2h) et 3 sances de 2h de TP. Nous indiquons dans le tableau suivant les sections quidcrivent chaque point du programme. Le programme encourage une approche applicative authme des bases de donnes, ce qui est naturel, puisque les bases de donnes sont partout dansla vie de tous les jours. Nanmoins, il nous parait extrmement rducteur de faire croire queles bases de donnes ne sont quun domaine dapplication. Outre des exemples applicatifs,nous prsentons ainsi une approche plus formelle et mathmatique, qui nous parait parfaitementadapte au niveau des lves des classes prparatoires. Il serait en effet regrettable de faire croireque lapprentissage fondamental des bases de donnes se limite lutilisation de ressourcesprsentes par les sites grand public, mme si ces sites sont de bonnes rfrences techniquespour un utilisateur dbutant, et permettent une mise en oeuvre rapide de la pratique des basesde donnes sans passer par lapprentissage et la comprhension de tous les concepts.

    Le programme propose galement les exercices suivants : utiliser une application de cration et de manipulation de donnes, offrant une interface

    graphique, notamment pour crer une base de donnes simple, ne comportant pas plus detrois tables ayant chacune un nombre limit de colonnes. Linstallation et lexploitationdun serveur SQL ne fait pas partie des attendus.

    lancer des requtes sur une base de donnes de taille plus importante, comportant plusieurstables, que les tudiants nauront pas eu construire, laide dune application offrantune interface graphique

    enchaner une requte sur une base de donnes et un traitement des rponses enregistresdans un fichier.

    Nous avons dj dans ce chapitre introductif, bross un tableau des possibilits et des pro-blmes lis aux bases de donnes, en particulier de problmes qui ne sont pas au programme.

    14

  • CHAPITRE 1. INTRODUCTION

    1

    Contenus Prcisions et commentairesVocabulaire des bases de donnes :relation(2.2), attribut(2.2),domaine(2.2), schma derelation(2.2) ; notion de clprimaire(4.1).

    Ces concepts sont prsents dansune perspective applicative, partirdexemples.

    Oprateurs usuels sur les ensemblesdans un contexte de bases dedonnes : union, intersection,diffrence. Oprateurs spcifiquesde lalgbre relationnelle :projection(3.2), slection (ourestriction)(3.2), renommage(3.2),jointure(3.2), produit(3.2) etdivision cartsiennes (3.3) ;fonctions dagrgation : min, max,somme, moyenne, comptage (4.4).

    Ces concepts sont prsents dansune perspective applicative. Lesseules jointures prsentes seront lesjointures symtriques, simples (uti-lisant JOIN . . . ON . . . =. . . ).

    Concept de client-serveur(1.1).Brve extension au cas delarchitecture trois-tiers(1.1).

    On se limite prsenter ce conceptdans la perspective applicativedutilisation de bases de donnes.

    Dans la suite de ce document, nous nous consacrons aux aspects spcifiques du programme,dbutant dans le Chapitre 2 toutefois par un aspect qui nest pas explicitement au programme,mais qui nest pas non plus explicitement hors programme, car il est fondamental : il sagit ducalcul relationnel, fondement thorique des bases de donnes, sans quoi cette partie du cours sersumrait une utilisation des bases de donnes comme un simple outil. Puis, dans le Cha-pitre 3 nous discutons de lalgbre relationnelle, et donnons quelques exemples doptimisation,problmatique fondamentale des bases de donnes. Dans le Chapitre 4 nous prcisons la syntaxeSQL, et discutons du problme de laggrgation de donnes. Enfin, dans le Chapitre 5 nousproposons du contenu pour le droulement de trois sances de TP, deux sur machine et une surpapier. Le dcoupage en trois chapitres de cours, respecte cette division que nous prconisons.

    15

  • 1CHAPITRE 1. INTRODUCTION

    16

  • 2 Le Calcul Relationnel2.1 Objectif du chapitre

    Dans ce chapitre, nous montrons par lexemple comment crire des requtes en utilisant leformalisme logique du calcul relationnel. Lintrt de cette criture est quelle est dclarativeet non pas imprative, cest--dire quelle exprime ce quon souhaite obtenir et non pas com-ment lobtenir. Ce paradigme est dj utilis dans des langages fonctionnels comme Caml quipermettent de sabstraire de dtails de calculs. Mais le calcul relationnel va bien plus loin enlaissant au systme le choix de lalgorithme dvaluation.

    Avant toute chose, nous allons dfinir formellement des notations, et une terminogie. Celapourra paratre un peu lourd ; on sappuiera sur les exemples pour bien comprendre quil ny arien de vraiment complexe. Puis nous passerons au langage de requtes proprement dit.

    2.2 Concepts des Bases de DonnesNous utiliserons dans la suite de ce chapitre le schma de base de donne CINEMA de la

    Figure 2.1. Nous illustrerons la longue liste de dfinitions qui suit avec cet exemple.

    2.2.1 Dfinitions et NotationsDfinition 2.2.1. (Attribut) On dispose dun ensemble (infini) att dattributs. On associe un attribut a, un ensemble de constantes, potentiellement infini not 1 dom(a). On note domlunion des ensembles de toutes les constantes de tous les attributs. On utilisera aussi un ensemblevar de variables.

    Exemple 2.2.2: Dans la base de donnes CINEMA, Titre ou Salle sont des attributs.Les entiers, les rels ou les jours de la semaine, sont des domaines.

    Dfinition 2.2.3. (Schma relationnel) Un schma relationnel R consiste en un ensemble finide n attributs U = {u1, . . . , un}. On le note aussi R[u1, . . . , un] ou tout simplement R[U ]. Ondfinit une fonction sort, qui associe chaque schma relationnel son ensemble dattributs,cest--dire sort(R) = U .

    Exemple 2.2.4: Film est un schma relationnel, avec :

    sort(Film) = {Titre;Directeur;Acteur}.

    1. Parfois, galement appel type de a

    17

  • 2CHAPITRE 2. LE CALCUL RELATIONNEL

    On omet souvent les virgules et les parenthses pour les ensembles dattributs ; et par exemple,on crit :

    sort(Film) = Titre Directeur Acteur.

    Dfinition 2.2.5. (Arit) Larit dun schma relationnel est son nombre dattributs. On notedonc arite(R) = #sort(R), o # reprsente le cardinal dun ensemble.

    Exemple 2.2.6: Larit de Film est 3.

    Dfinition 2.2.7. (Schma de base de donnes) Un schma de base de donnes R est unensemble fini de p schmas relationnels que lon crit R = {R1[U1], . . . , Rp[Up]} pour indiquerles schmas relationnels qui la composent ainsi que leurs sorts.

    Exemple 2.2.8: CINEMA = { Film [Titre Directeur Acteur ] ; Coordonnes[SalleAdresseTlphone ] ; Sance [SalleTitreHoraire ] } est un schma de basede donnes.

    Dfinition 2.2.9. (n-uplet) Un n-uplet (ou nuplet, ou encore tuple en anglais) est une fonctionsur un ensemble fini U dattributs. Plus prcisment, un n-uplet u sur U est une fonction de Udans dom. Dans ce cas, le sort de u est U , et son arit est |U |.

    On crit les n-uplets linairement, par exemple, A : 5, B : 3. Lordre dans cette syntaxeest un ordre implicite att sur att. Soit u un n-uplet sur U et A U ; comme il est standarden mathmatiques, u(A) dnote la valeur de u pour lattribut A. On tend cette notation auxsous-ensembles de U . Soit V U , u[V ] dnote le n-uplet v sur V tel que v(A) = u(A) pourchaque A V (cest--dire u[V ] = u|V , la restriction de la fonction u V ). Le n-uplet sur unensemble vide dattributs est dnot .

    Dfinition 2.2.10. (Relation) Une relation, appele galement instance sur un schma rela-tionnel R[U ] (ou sur un ensemble U dattributs), est un ensemble fini I de n-uplets sur U . Ondira que le sort de I est U et que son arit est |U |.

    Chaque table dans la Figure 2.1 est la reprsentation graphique dune relation.

    Dfinition 2.2.11. (Base de Donnes) Une base de donnes I, appele galement instance dunschma de base de donnes R est une fonction dont lensemble de dfinition est R et telle quepour chaque R R, I(R) est une relation sur R.

    Pour rsumer, la Figure 2.1 reprsente une instance de la base de donnes CINEMA. Leschma de base de donnes correspondant est donn par :

    CINEMA = {Film,Coordonnes,Sance}

    o les les schmas relationnels Film et Coordonnes, et Sance sont tous darit 3 et ont lessorts suivants :

    sort(Film) = {Titre, Directeur, Acteur}sort(Coordonnes) = { Salle, Adresse, Tlphone}sort(Sance) = {Salle, Titre, Horaire}

    Pour simplifier, on supposera par la suite que tous les attributs auront comme domaine lensembledes chanes de caractres 2.

    2. On pourrait dfinir par exemple lhoraire comme une expression rgulire dfinissant un sous-ensemble deschanes de caractres, comme dfini par la norme ISO 8601.

    18

  • CHAPITRE 2. LE CALCUL RELATIONNEL

    2

    Film Titre Directeur Acteur

    Mais qui a tu Harry ? Hitchcock GwennMais qui a tu Harry ? Hitchcock ForsytheMais qui a tu Harry ? Hitchcock MacLaineMais qui a tu Harry ? Hitchcock Hitchcock

    Cris et chuchotements Bergman AnderssonCris et chuchotements Bergman SylwanCris et chuchotements Bergman ThulinCris et chuchotements Bergman Ullman

    Coordonnes Salle Adresse Tlphone

    Gaumont Opra 31 bd. des Italiens 47 42 60 33Saint Andr des Arts 30 rue Saint Andr des Arts 43 26 48 18Le Champo 51 rue des Ecoles 43 54 51 60

    Georges V 144 av. des Champs-Elyses 45 62 41 46Les 7 Parnassiens 98 bd. du Montparnasse 43 20 32 20

    Sance Salle Titre Horaire

    Gaumont Opra Cris et chuchotements 20 :30Saint-Andr des Arts Mais qui a tu Harry ? 20 :15Georges V Cris et chuchotements 22 :15

    Les 7 Parnassiens Cris et chuchotements 20 :45

    Figure 2.1 La base de donnes CINEMA

    19

  • 2CHAPITRE 2. LE CALCUL RELATIONNEL

    2.3 Calcul conjonctifNous allons dmarrer avec des exemples de requtes simples. Ensuite, nous les complexifions

    en rajoutant des concepts au fur et mesure du chapitre. Nous dbutons donc avec des opra-teurs logiques en nombre restreint, mais qui permettent tout de mme de rpondre certainesquestions simples. . . et la plupart du temps les questions que se posent les utilisateurs de basesde donnes sont simples.

    2.3.1 ExemplesVoici quelques exemples de requtes en franais que nous pouvons poser sur cette base.

    Dans la suite de ce document, nous donnerons des expressions formelles sous forme du calculrelationnel permettant de capturer la smantique de ces requtes, et des expressions algbriquespermettant de calculer les rsultats de ces requtes.

    (2.2.1) Qui est le metteur en scne de Cris et chuchotements ?(2.2.2) Quelles salles affichent Chiens de paille ?(2.2.3) Quels sont ladresse et le numro de tlphone du cinma Le Studio ?Chacune de ces requtes ne met en jeu quune relation unique. Les requtes suivantes impliquentplusieurs relations :

    (2.2.4) Donner les noms et adresses des salles affichant un film de Bergman.(2.2.5) Donner les paires de personnes telles que la premire a mis en scne la seconde, et vice

    versa ;(2.2.6) Peut-on voir un film de Bergman la salle Gaumont Opra ?

    Considrons plus en dtail la requte (2.2.4). Intuitivement, on veut dire :

    si les n-uplets r1, r2, r3 respectivement dans les relationsFilm, Sance, Coordonnes sont tels que

    le Directeur dans r1 est Bergmanet les Titre dans r1 et r2 sont les mmeset les Salle dans r2 et r3 sont les mmes

    alors nous voulons les Salle et Adresse du n-uplet r3.

    2.3.2 Formules bien-formes du calcul conjonctifLe calcul conjonctif est dfini formellement de la manire suivante et correspond informel-

    lement la logique du premier ordre avec uniquement des conjonctions et le quantificateurexistentiel.

    Un terme t est une constante ou une variable, on note t var dom. Pour un schma debase de donne R et R R, un atome sur R est une expression R(t1, . . . , tn) o n = arite(R)et chaque ti est un terme.

    Par exemple, la constante Chiens de paille et les variables xd, xa sont des termes etFilm(Chiens de paille, xd, xa) est un atome sur Film.

    Les formules de base incluent les atomes sur R et les expressions e = e pour des termes e, e.Les formules bien-formes sont de la forme :(a) , o est une formule de base sur R ; ou(b) ( ) o et sont des formules bien-formes sur R ; ou(c) x , o x est une variable et une formule bien forme sur R.

    20

  • CHAPITRE 2. LE CALCUL RELATIONNEL

    2

    Exemple 2.3.1: 0 = Film(xt, Bergman, xa) Sance(xs, xt, xh) est une formulebien-forme, puisque Film(xt, Bergman, xa) et Sance(xs, xt, xh) sont deux atomes.

    Les notions doccurrence de variables libres et lies dans une formule sont dfinies de lamanire usuelle. Une occurrence dune variable x est libre dans une formule si :(i) est un atome ; ou(ii) = ( ) et loccurrence de x dans ou est libre ; ou(iii) = y , x et y sont des variables distinctes, et loccurrence de x est libre dans .Lensemble libre() est lensemble des variables qui ont au moins une occurrence libre dans .Une variable est lie si elle nest pas libre.Exemple 2.3.2: libre(0) = {xt, xa, xs, xh}.

    Dfinition 2.3.3. Requte Une requte est dfinie comme une expression de la forme

    {t1, . . . , tm | }

    o t1, . . . , tm sont des termes et o lensemble des variables apparaissant dans t1, . . . , tm estexactement libre().

    Exemple 2.3.4: {Bergman, xt, xa, xs, xh | Film(xt, Bergman, xa) Sance(xs, xt,xh) } est une requte.

    Une telle requte va dfinir une fonction. Applique une instance de schma de base dedonnes, elle va retourner une relation darit m, cest--dire un ensemble de n-uplets darit m,les rsultats. On pourra donner la relation rsultat :

    res = {t1, . . . , tm | }

    On dira quon a dfini une vue de la base de donnes. La diffrence entre une relation de la basede donnes et une vue de cette mme base, est que la relation est stocke sur disque et quellepeut tre modifie, alors que la vue est calcule partir des relations stockes et quelle nestpas directement modifiable.

    2.3.3 Exercices corrigNous donnons ici les requtes permettant dexprimer les exemples de la Section 2.3.1.

    Exemple 2.3.5: La requte (2.2.1) Qui est le Directeur de Chiens de paille ? scrit :

    res = {xd | xa,Film(Chiens de paille, xd, xa)} .

    On notera que la rponse est un ensemble de nuplets. Donc on pourra avoir zro, une ouplusieurs rponses.

    Exemple 2.3.6: La requte (2.2.2) Quelles salles projettent Chiens de paille ? scrit :

    res = {xs | xh,Sance(xs, Chiens de paille, xh)} .Exemple 2.3.7: La requte (2.2.3) Adresse et numro de tlphone du Studio ? scrit :

    res = {xa, xt | Coordonnes(Studio, xa, xt)} .Exemple 2.3.8: La requte (2.2.4) Nom et Adresse des salles projetant un film de Berg-man ? scrit :

    21

  • 2CHAPITRE 2. LE CALCUL RELATIONNEL

    res = {xs, xad | xtel, xh, xact, xtitre,Film(xtitre, Bergman, xact)Sance(xs, xtitre, xh)Coordonnes(xs, xad, xtel)}

    .

    Observons que la variable xtitre apparait dans latome sur la relation Film et celui surSance. On parle bien dun film de Bergman, et on cherche une sance de ce film et pasdun autre.

    Notons que cette mme requte peut galement scrire en regroupant les variables quan-tifies ensemble.

    res = {xs, xad | xh, xact, xtitre,Film(xtitre, Bergman, xact)Sance(xs, xtitre, xh)xtel,Coordonnes(xs, xad, xtel)}

    .

    Exemple 2.3.9: La requte (2.2.5) Paires directeur/acteur ? scrit :

    res = {xd, xa | xt,Film(xt, xd, xa)}

    Exemple 2.3.10: La requte (2.2.5) Peut-on voir un film de Bergman la salle GaumontOpra ? scrit :

    res = { | xt, xs, xh Film(xt, Bergman, xa)Film(Gaumont Opra, xt, xh)}

    On notera que lensemble rsultat contiendra le n-uplet darit 0 si la formule logique estvraie, et sera vide sinon.

    2.3.4 Conclusion

    Le calcul conjonctif est simple et possde une quivalence smantique trs intressante aveclalgbre SPJR, prsente dans la Section 3.2. Toutefois, il ne permet pas de poser certainesquestions :

    (2.3.1) O puis-je voir le film Annie Hall ou Manhattan ? il faudrait la disjonction, cest--dire le OU (), ce qui donne le calcul positif !

    (2.3.2) Quels sont les acteurs qui ont jou dans tous les films de Hitchcock ? il faudrait lequantificateur universel.

    (2.3.3) Quels sont les films que Hitchcock a dirigs, mais dans lesquels il na pas jou en tantquacteur ? il faudrait la ngation ! Dans la section suivante, nous prsentons le calculrelationnel, qui permet dexprimer ces types de questions.

    Ce qui est intressant, cest quen rajoutant simplement la ngation, on obtient la fois ladisjonction et le quantificateur universel, puisque ( ), et x (x()).

    2.4 Calcul relationnel

    En ajoutant la ngation au calcul conjonctif, on obtient le calcul relationnel, qui est essentiel-lement le calcul des prdicats du premier ordre (sans symbole de fonction). On a un problme :celui de garantir des rsultats finis.

    On donnera ici une interprtation particulire simplificatrice : linterprtation dans le do-maine actif ; et nous envisagerons ensuite des interprtations plus riches.

    22

  • CHAPITRE 2. LE CALCUL RELATIONNEL

    2

    2.4.1 Formules bien-formes du calcul relationnelUn terme est une constante ou une variable, cest--dire un lment de var dom. Pour

    un schma de base de donne R et R R, un atome sur R est une expression R(t1, . . . , tn) on = arite(R) et chaque ti est un terme.

    Les formules de base incluent les atomes sur R et les expressions e = e pour des termes e, e.Les formules (bien-formes) sont de la forme :(a) , o est une formule de base sur R ;(b) , o est une formule bien forme sur R ;(c) ( ), ( ) o et sont des formules bien formes sur R ; et(d) x , x , o x est une variable et une formulebien forme sur R.

    Comme il est usuel,

    x1, x2, . . . , xm est une abrviation de x1x2 . . . xm ,

    et on inclue souvent deux connecteurs logiques supplmentaires implique () et est quivalent () que lon voit de la manire suivante

    ( ) ( )

    Nous tendons les notions doccurrence de variables libres et lies dj introduites. Uneoccurrence dune variable x est libre dans une formule si :(i) est un atome ; ou(ii) = ( ) et loccurrence de x dans ou est libre (et idem pour ) ; ou(iii) = y , x et y sont des variables distinctes variables, et loccurrence de x est libre dans

    (et idem pour ).Lensemble libre() est lensemble des variables qui ont au moins une occurrence libre dans .Une variable est lie si elle nest pas libre.

    Une requte est dfinie comme une expression de la forme

    {t1, . . . , tm | }

    o t1, . . . , tm sont des termes et o lensemble des variables apparaissant dans t1, . . . , tm estexactement libre().

    2.4.2 Exercices corrigs

    Exemple 2.4.1: La requte (2.3.1) Salles o on peut voir Annie Hall ou Manhattan est exprime par :

    res = {xt | xs1, xs2(Sance(xt, Annie Hall, xs1) Sance(xt, Manhattan, xs2))}.

    Notons que si la question implique quon voulait les voir exactement au mme horaire dedbut, alors il faudrait crire :

    res = {xt | xs(Sance(xt, Annie Hall, xs) Sance(xt, Manhattan, xs))}Exemple 2.4.2: La requte (2.3.2) Acteurs qui ont jou dans tous les films de Hitchcock est exprime par :

    res = {xa | xf ,Film(xf , Hitchcock, xa)}.

    23

  • 2CHAPITRE 2. LE CALCUL RELATIONNEL

    Exemple 2.4.3: La requte (2.3.3) Films dirigs par Hitchcock dans lesquels il na pasjou est exprime par :

    res = {xt | xaFilm(xt, Hitchcock, xa) Film(xt, Hitchcock, Hitchcock)} .

    2.4.3 Pour aller plus loinCette section est hors-programme. Elle est utile pour le lecteur qui souhaite comprendre plus

    profondment le Thorme dquivalence, nonc la Section 3.4.1

    Requtes non sres

    Avant de prsenter une smantique prcise, on prsente intuitivement les problmes dans lesexpressions suivantes :

    (non-sre-1) {x | Film(Cris et chuchotements, Bergman, x)}(non-sre-2) {x, y | Film(Cris et chuchotements, Bergman, x)

    Film(y, Bergman, Ullman)}

    Dans le calcul des prdicats, la requte non-sre-1 produit tous les nuplets a tels que a domet Cris et chuchotements, Bergman, a nest pas dans la relation Film. Comme la relationFilm est par dfinition finie et que dom est infini, la requte donne un rsultat infini. Commelinput est par dfinition fini, le requte donne un rsultat infini. La mme remarque est vraiepour la requte non-sre-2, mme si elle nutilise pas explicitement la ngation.

    Une solution naturelle (encore que pas totalement satisfaisante) est de considrer que lesvariables prennent leurs valeurs dans un contexte restreint, par exemple, une variable de typeacteur ne prend comme valeurs que les acteurs connus de la base. Mme si les domaines sous-jacents sont finis, les utilisateurs ne sont pas censs les connatre et il est gnant que le rsultatdes requtes dpende de cette information.

    Un autre problme assez subtil vient de la quantification. Considrons la requte

    (non-sre-3) {x | y R(x, y)}

    Si R est fini, alors la rponse cette requte est finie, mais elle dpend du domaine des y auxquelson applique le quantificateur. En effet, si y prend sa valeur dans la totalit de dom(y) et quedom(y) est infini, alors aucun x ne pourra vrifier cette relation, puisquil ne peut tre au mieuxen relation quavec un nombre fini de y. Ainsi, le rsultat serait toujours vide. Si on considreune interprtation sur un domaine fini, alors le rsultat pourrait tre non vide, puisquil ny aalors plus dincompatibilit entre la possibilit quil existe un x en relation avec un ensemble finide valeurs de y.

    Cest la notion de domaine actif (le domaine effectivement utilis) qui va nous permettre decontourner ces difficults.

    Interprtation dans le domaine actif

    Soit une requte q = {libre(), constantes | }, et une base de donnes I (cest dire uneinstance dun schma R). On note adom(q, I) lensemble des constantes apparaissant soit dansq soit dans I, et on le considre comme domaine pour les variables de la requte (en dautrestermes, on nautorise comme valeur possible des variables uniquement des valeurs prsentes dansla base de donnes ou dans la requte). On considre donc des valuations de libre() dansadom(q, I). Alors, I satisfait pour (dans cette interprtation dans le domaine actif), dnotI |=adom [], si

    24

  • CHAPITRE 2. LE CALCUL RELATIONNEL

    2

    (a) = R(u) est un atome et (u) I(R) ;(b) = (s = s) est un atome dgalit et (s) = (s) ;(c) = ( ) et I |=adom [] et I |=adom [] ;(d) = ( ) et I |=adom [] ou I |=adom [] ;(e) = et I 6|=adom [], cest--dire, I |=adom [] nest pas vrai ;(f) = x et pour quelque c adom, I |=adom [ {x/c}] ; ou(g) = x et pour chaque c adom, I |=adom [ {x/c}].

    o {x/c} reprsente lextension de u obtenue en ajoutant llment x son domaine et enlui assignant la valeur c.

    Soit R un schma, et q = {t1, . . . , tn | } une requte du calcul sur I. Alors, limage de Ipar q (pour cette smantique) est donne par :

    qadom(I) = {(t1, . . . , tn) | I |=adom [], est une valuation sur libre()dont limage est incluse dans adom}.

    Autres smantiques

    On peut dfinir la smantique dune requte en prenant dom la place du domaine actif.Dans ce cas, la rponse une requte peut tre considre comme indfinie si le rsultat estinfini. Les requtes intressantes dun point de vue pratique sont celles dont la rponse nedpend pas du choix du domaine (en supposant quil contienne au moins le domaine actif).Malheureusement, cette proprit est indcidable, cest--dire quil nexiste pas dalgorithme quidcide si une requte dpend ou non du domaine. On a donc dvelopp une gamme de critressuffisants (qui garantissent que les requtes sont bien indpendantes du domaine). Les langagesutiliss en pratique rpondent ces critres, notamment en forant lutilisateur prciser ledomaine des variables quil utilise. Nous verrons cela avec SQL.

    25

  • 2CHAPITRE 2. LE CALCUL RELATIONNEL

    26

  • 3 LAlgbre Relationnelle3.1 Objectif du chapitre

    Dans ce chapitre, nous montrons comment crire des requtes en utilisant lalgbre relation-nelle. Lintrt de cette criture est quelle conduit directement des algorithmes pour valuerles requtes, calculer leurs rponses. Nous donnons (sans preuve formelle) le rsultat sans doutele plus fondamental de ce domaine : le thorme dquivalence de Codd. Ce thorme tablitlquivalence entre le calcul et lalgbre relationnels. En fait, lintrt rside dans la traductiondes requtes (provenant de lutilisateur) en requtes directement valuables (et optimisables)par le systme. Si on voit la base de donne comme un outil tampon entre lutilisateur (humain)et une machine, ce rsultat est la pierre angulaire de cette interface.

    3.2 Algbre conjonctivePar algbre, nous entendons ici simplement un ensemble avec des oprations fermes sur

    cet ensemble. Lalgbre et ses oprations vont apporter une perspective trs diffrente sur lesrequtes des bases de donnes relationnelles. Nous considrons des oprations unaires et binairessur des relations. Lapplication de ces oprations exige certaines contraintes de typage. (Cestune algbre plusieurs sorts). Nous verrons pour chaque opration les contraintes quelle impose ses arguments.

    Dans un premier temps, nous considrons quatre oprations : slection, projection, jointure etrenommage. Nous appellerons algbre conjonctive lalgbre obtenue avec ces quatre oprations.Un rsultat essentiel est lquivalence entre le calcul conjonctif et lalgbre conjonctive.

    Commenons par un exemple qui nous permettra dillustrer deux oprations unaires et uneopration binaire : la slection note qui permet dliminer des nuplets (des lignes de relation) la projection note pi qui permet dliminer des attributs (des colonnes de relation). la jointure note 1 qui permet de combiner les informations de plusieurs relations.

    Ces oprations seront dfinies formellement plus loin.Exemple 3.2.1: La requte (2.2.4), Quels sont les nom et adresse des salles affichant unfilm de Bergman peut tre construite en utilisant des oprations algbriques. Dabord, onutilise la slection pour extraire les n-uplets de Film avec Bergman comme Directeur :

    I1 := Directeur=Bergman(Film).

    Ensuite, on obtient la liste des titres de films par projection :

    I2 := piTitre(I1).

    27

  • 3CHAPITRE 3. LALGBRE RELATIONNELLE

    Observez que ces deux oprations permettent de filtrer linformation en rduisant le nombrede lignes et de colonnes dune relation.

    La jointure nous sert relier des donnes contenues dans plusieurs tables. On a par I2 lestitres de films de Bergman. On y rajoute les salles et adresses par jointures : I2 et Sanceon en commun le Titre et Sance et Coordonnes on en commun lattribut Salle :

    I3 := I2 1 Sance 1 Coordonnes.

    Le rsultat est obtenu en se dbarrassant des colonnes inutiles :

    I4 := piSalle,Adresse(I3).

    En dautres termes, la requte (2.2.4) peut tre obtenue par :

    piSalle,Adresse(piTitre(Directeur=Bergman(Film)) 1 Sance 1 Coordonnes),

    ou simplement par :

    piSalle,Adresse(Directeur=Bergman(Film 1 Sance 1 Coordonnes))Comme le montre lexemple prcdent, la jointure naturelle peut tre utilise pour construire

    des ponts entre donnes venant de plusieurs relations en utilisant les noms dattributs com-muns. Cependant, cela nest pas possible si on veut relier deux relations suivant des nomsdattributs distincts. Un autre exemple va nous permettre de montrer comment raliser cela enutilisant une quatrime opration, le renommage. Nous poursuivons donc par un exemple, etdfinissons ensuite ces quatre oprations formellement.Exemple 3.2.2: Supposons que la base de donnes CINEMA est tendue par une relationAime de schma {Personne, Directeur }, o Aime(x, y) indique que Personne x aimeDirecteur y. Pour rpondre la requte Quels directeurs sont aims dau moins un deleurs pairs ? on aimerait faire la jointure entre les relations Film et Aime en associant lacolonne Directeur de la premire la colonne Personne de la seconde. Pour ce faire, oncommence par renommer (oprateur ) lattribut Directeur en Personne dans Film.On peut ensuite faire la jointure du rsultat avec Aime et rpondre la requte par :

    piDirecteur(DirecteurPersonne(Film) 1 Aime)Notons que lattribut Directeur sur lequel on projette au final est lattribut de la relationAime, lattribut de la relation Film ayant t renomm !

    Les oprations sont dfinies formellement de la manire suivante.

    Slection : La slection a la forme A=a et A=B, A,B att et a dom. Pour I une relation(ayant A (respectivement A,B) parmi ses attributs),

    A=c(I) = {t I | t(A) = c} A=B(I) = {t I | t(A) = t(B)}.

    Au contraire, C=c(I) est incorrect car I na pas dattribut C.

    Projection : La projection a la forme piA1,...,An , n 0 o A1, . . . , An att. Pour I une relation(ayant A1, . . . , An parmi ses attributs),

    piA1,...,An(I) = {A1 : t(A1), . . . , An : t(An) | t I}

    Au contraire, piC,C(I) est incorrect si I na pas dattribut C ou C .Si lon considre un n-uplet comme une fonction, on peut dfinir la projection laide de

    la notion de restriction dune fonction un sous-ensemble de son ensemble de dfinition de lafaon suivante :

    piA1,...,An(I) = {t|A1,...,An | t I}.

    28

  • CHAPITRE 3. LALGBRE RELATIONNELLE

    3

    Jointure (naturelle) : Cette opration, dnot 1, sapplique deux relations quelconques Iet J de sorts V et W , respectivement, et produit une relation de sort V W :

    I 1 J = {t sur V W | il existe v I et w J,t|V = v et t|W = w}

    Quand sort(I) = sort(J), I 1 J = IJ (cest lintersection ensembliste classique), et quandsort(I) sort(J) = , alors I 1 J est le produit cartsien de I et J , dnot I J .

    Par exemple, considrons I1, I2, deux relations sur AB, I3 sur BC et I4 sur CD. Alors on a : I1 1 I2 = I1 I2 est une relation sur AB, I1 1 I3 est une relation sur ABC, et I1 1 I4 = I1 I4 est une relation sur ABCD.Lopration de jointure est associative et admet comme lment neutre la relation darit 0

    non vide {}. Comme la jointure est associative, on sautorise la voir comme polyadique, parexemple, on crira I1 1 1 In, ou mme 1 {Ii} pour un ensemble {Ii} dinstances en utilisantaussi la commutativit de la jointure.

    Renommage : Un renommage pour un ensemble fini dattributs U est une fonction injective deU dans att que lon notera A1 B1, . . . , An Bn. Lopration de renommage A1B1,...,AnBntransforme une relation sur A1, . . . , An en une relation sur B1, ..., Bn de la manire suivante :

    A1B1,...,AnBn(I) = {v sur B1, . . . , Bn | il existe u I, v(Bi) = u(Ai) pour tout i [1..n]}

    Nous allons dfinir lalgbre conjonctive. Les lments de cette algbre sont appels desrequtes algbriques et ses oprations sont les oprations de slection (, appel galement res-triction), de projection (pi), de renommage () et de jointure naturelle (1).

    Une requte algbrique est une application qui associe une instance I dun schma R unerelation dun schma particulier. Pour construire lensemble des requtes algbriques, on dfiniten premier lieu un ensemble de requtes algbriques de base :

    si R est un schma de relation de R, alors [R] est une requte algbrique ; Si A est un attribut de att et a un lment du domaine dom, alors {A : a} est une

    requte algbrique.

    Ce second type de requtes est appel requte constante. On donne ces deux types de requtesalgbriques la smantique suivante :

    [R](I) = I(R){A : a}(I) = {A : a}

    cest dire que lorsque lon applique [R] une base de donnes I de schma R, le rsultat est larelation I(R), et lorsque lon applique {A : a} une base de donnes de schma R, le rsultatest la relation une ligne et une colonne {A : a}. Ainsi, le sort de la requte [R] est toutsimplement sort(R) et celui de {A : a} est A.Exemple 3.2.3: Sur le schmaCINEMA, le sort de [Film] est Titre,Directeur,Acteuret celui de {Directeur : Bergman} est Directeur.

    Lensemble des requtes algbriques est engendr partir de ces requtes de bases et desoprateurs de slection, projection, renommage et jointure de la faon suivante : si q1 et q2 sontdeux requtes algbriques, A1, . . . , An, B1, . . . , Bn des attributs et c un lment de dom, alors :

    A1=c(q1) et A1=A2(q1) sont des requtes algbriques ; piA1,...,An(q1) est une requte algbrique ; A1B1,...,AnBn(q1) est une requte algbrique ;

    29

  • 3CHAPITRE 3. LALGBRE RELATIONNELLE

    q1 1 q2 est une requte algbrique.On donne aux oprateurs et la jointure de requtes algbriques la smantique suivante, o

    I est une instance dun schma de base de donnes R et un oprateur de slection, projectionou renommage et q1 et q2 deux requtes algbriques : (q1)(I) = (q1(I)) ; (q1 1 q2)(I) = q1(I) 1 q2(I).Exemple 3.2.4: [Film] 1 {Directeur : Bergman} est une requte algbrique, dont lasmantique donne :

    [Film] 1 {Directeur : Bergman}(CINEMA)= [Film](CINEMA) 1 {Directeur : Bergman}(CINEMA)= Film 1 {Directeur : Bergman}

    Cest donc la jointure naturelle entre la relation Film et la relation {Directeur : Bergman},cest--dire, lensemble des films dont le directeur est Bergman. On remarque que la requtealgbrique suivante donne le mme rsultat :

    Directeur=Bergman([Film])(CINEMA).

    On peut donc crire :

    [Film] 1 {Directeur : Bergman} = Directeur=Bergman([Film])Le rsultat important de la section est le suivant :

    Thorme 3.2.5. (Thorme dquivalence) Une requte est exprimable en calcul conjonctifsi et seulement si elle est exprimable en algbre conjonctive.

    Point Crucial : Toute requte du calcul conjonctif peut facilement tre exprime dans lalgbreconjonctive : est simul par une restriction, et par la jointure. Pour la simulation de lalgbrepar les requtes conjonctives, on remarque dans un premier temps que cela est vident pour desrequtes de la forme :

    () piU ((1(|f1(R1)) 1 1 n(|fn(Rn))))

    o chaque i est une condition de slection, chaque fi un renommage, et chaque Ri une relationde la base de donnes. (Voir lexemple plus loin.) Pour des requtes algbriques plus complexes,on se ramne la forme () en utilisant des quivalences algbriques telles que :

    F (F (q)) F (F (q))piX(piY (q)) piXY (q)F (piX(q)) piX(F (q)) si F porte sur des attributs de X

    q1 1 q2 q2 1 q1F (q1 1 q2) F (q1) 1 q2 si F porte sur des attributs de sort(q1)piX(q1 1 q2) piX(q1) 1 piX(q2) si X sort(q1) sort(q2)

    2

    Lexemple suivant illustre la traduction de requte algbrique en requte calcul.Exemple 3.2.6: Considrons la requte algbrique suivante :

    piAC(A=C(C=A(B=1(R) 1 |ABC/ABC(R))))

    30

  • CHAPITRE 3. LALGBRE RELATIONNELLE

    3

    o sort(R) = ABC. Une requte conjonctive quivalente est :

    {x, z | y(R(x, 1, z) R(z, y, x)}Lexemple suivant illustre une rcriture algbrique.

    Exemple 3.2.7: Soit sort(R) = ABC et sort(S) = BCD. Alors nous avons :

    piAD(C=1(R 1 S)) piAD(C=1(R) 1 S) piAD(piABD(C=1(R) 1 S)) piAD(piAB(C=1(R)) 1 piBD(S))

    3.3 Algbre relationnellePour obtenir une algbre avec un pouvoir dexpression quivalent celui du calcul relationnel,

    il suffit de rajouter lunion () et la diffrence (\), deux oprations qui ne peuvent tre appliquesque sur deux relations de mme sort.Exemple 3.3.1: La requte (2.3.1) Salles o on peut voir Annie Hall ou Manhattan est exprime par :

    piSalle(Titre=Annie HallSance Titre=ManhattanSance).Exemple 3.3.2: Division Cartsienne. Pour crire la requte (2.3.2) Nom des acteursayant jou dans tous les films de Hitchcock , il faut russir crire le quantificateur universelen utilisant la diffrence. Pour faciliter la lisibilit, nous dcomposons ce calcul en plusieurstapes. Tout dabord il faut calculer tous les films de Hitchcock (FHitch). On note galementA la projection sur lattribut Acteur. On construit ensuite grce au produit cartsien unensemble de toutes les combinaisons possibles dacteurs et de films de Hitchcock (X). Sion calcule Y = X \ Film, on aura retir tous les acteurs ayant jou dans tous les films deHitchcock. Il nous restera comparer la projection sur Acteur de Y avec lensemble desacteurs Y pour obtenir le rsultat attendu Z !

    1. FHitch = piTitre,Directeur(Directeur=Hitchcock(Film))2. A = piActeur(Film)3. X = FHitch A4. Y = X \ Film5. Z = A \ YCette opration scrit galement de la manire suivante, en utilisant loprateur de divi-

    sion cartsienne, not : piActeur(Film piTitreDirecteur=Hitchcock(Film)).Formellement, la division dune relation R1 par une relation R2 est une relation Q = R1R2

    de sort(Q)=sort(R1) \ sort(R2) telle que QR2 R1.Exemple 3.3.3: La requte (2.3.3) Films dirigs par Hitchcock dans lesquels il na pasjou est exprime par :

    piTitreDirecteur=Hitchcock(Film) \ piTitreActeur=Hitchcock(Film).

    3.4 Thorme dEquivalence de CoddNous concluons ce Chapitre avec un rsultat fondamental, lquivalence entre le calcul rela-

    tionnel et lalgbre relationnelle. La preuve de ce Thorme est hors programme, nous la donnons

    31

  • 3CHAPITRE 3. LALGBRE RELATIONNELLE

    nanmoins pour le lecteur intress. Limpact de ce Thorme, comme nous lavons expliqu dansle Chapitre 1 est quil permette lutilisateur de formuler ses requtes dans un langage descrip-tif et que le logiciel pourra les excuter, puisquil est capable de les transformer en une requtealgbrique et donc imprative.

    Thorme 3.4.1. (Thorme dEquivalence) Le calcul avec la smantique de domaine actifet lalgbre relationnelle ont des puissances dexpression quivalentes.

    Nous dmontrons lquivalence de lalgbre et du calcul avec domaine actif.

    Lemme 3.4.2. Chaque requte algbrique est exprimable dans le calcul avec domaine actif.

    Dmonstration. Pour simplifier la prsentation, nous utilisons ici une algbre base sur les nu-mros de colonnes au lieu des noms dattributs. Soit q une requte algbrique darit n. Nousconstruisons q = {x1, . . . , xn | q} quivalente q par induction sur les sous-requtes deq. (Une requte est construite en appliquant une opration une ou deux sous-requtes.) Enparticulier, pour une sous-requte q de q, on dfinit q par :(a) si q est R pour R R : q est R(x1, . . . , xarite(R)).(b) si q est {u1, . . . , um} o chaque uj est un nuplet darit : q est

    (x1 = u1(1) x = u1()) . . . (x1 = um(1) x = um()).

    (c) si q est F (q1) : q est q1F , o F est la formule obtenue partir de F en rempla cantchaque numro de colonne i par une nouvelle variable xi.

    (d) si q est pii1,...,in(q1) : q est

    yi1 . . . yin((x1 = yi1 xn = yin) yj1 . . . yjlq1(y1, . . . , yarite(q))),o j1, . . . , jl est une liste de [1, arite(q)] {i1, . . . , in}.

    (e) si q est q1 q2 : q est q1 q2(xarite(q1)+1, . . . , xarite(q1)+arite(q2)).(f) si q est q1 q2 : q est q1 q2 .(g) si q est q1 q2 : q est q1 q2 .

    Le lecteur pourra vrifier les dtails de cette construction.

    Lemme 3.4.3. Pour chaque requte du calcul, il existe une requte algbrique quivalente.

    Point Crucial : Soit q = {x1, . . . , xn | } une requte du calcul. Il est facile de construire unerequte algbrique construisant le domaine actif :

    qadom(I) = {a | a adom(q, I)}Ensuite, par induction, on associe chaque sous-formule une requte algbrique q telle que :

    {y1, . . . , ym | }(I) = q(I)On illustre cette construction avec quelques cas. Supposons que est une sous formule de .Alors q est construit de la manire suivante :(a) (y1, . . . , ym) est R(t1, . . . , tl), o chaque ti est une constante ou appartient ~y. Alors

    q pi~k(F (R)), o ~k et F sont choisis en accord avec ~y et ~t.(b) (y1, y2) est y1 6= y2 : q est 16=2(qadom qadom).(c) (y1, y2, y3) est (y1, y2) (y2, y3) : q est (q qadom) (qadom q).(d) (y1, . . . , ym) est (y1, . . . , ym) : q est (qadom qadom) q .2

    32

  • 4 SQL et Requtes Agrgat4.0.1 Objectif du chapitre

    Lalgbre relationnelle fait partie des fondements des bases de donnes relationnelles, utilisen interne par le SGBD pour valuer les requtes. Le langage SQL quant lui est destin auxutilisateurs du SGBD et, lheure actuelle, est le langage standard dinterrogation. Il marie dunecertaine faon lalgbre relationnelle et le calcul relationnel de n-uplets. SQL a t standardispar lANSI en 1986 puis par lISO en 1989, 1992, 1999, 2003 et 2008. Ces standards successifs onttendu les capacits du langage. En plus de ces standards, SQL possde de nombreux dialectesspcifiques chaque SGBD. En effet, le dveloppement des SGBD sest droul en parallle,voire a prcd la standardisation de la norme SQL. En consquence, seul un sous-ensemble dela norme est support par la grande majorit des SGBD (en particulier les SGBD open-source).Ce sous-ensemble correspond en fait la norme SQL-92. Cest donc cette version de la normeSQL que nous allons prsenter ici.

    La norme SQL-92 se dcompose en plusieurs parties. Linterrogation des donnes se faitpar lopration de slection (SELECT), dont la smantique est donne par une expression ducalcul relationel et dont lexcution peut tre faite par une quivalence avec des oprateurs delalgbre relationnelle. Le langage de manipulation de donnes (Data Manipulation Language ouDML) permet de modifier les donnes grce linsertion (INSERT), la mise jour (UPDATE)et la suppression (DELETE) de n-uplets. Le langage de dfinition de donnes (Data DefinitionLanguage ou DDL) se charge de la dfinition du schma dune BD. Enfin, SQL-92 inclut dautresoprations comme la gestion des droits ou la gestion des transactions.

    Lobjectif de ce chapitre est de donner au lecteur une connaissance de la syntaxe SQL, quilui permettra ensuite de tester la comprhension des bases de donnes en utilisant des SGBDexistants, tels que MySQL, Oracle, IBM DB2, Microsoft SQL Server, etc. Le langage SQL tantstandardis, les exemples donns ici fonctionneront sur nimporte quel SGBD respectant la normeSQL-92 (cest--dire peu prs tous). Nous introduisons galement dans ce chapitre le calculdagrgats, qui nest pas trait dans le calcul relationnel simple et lalgbre relationnelle SPJR.

    4.1 Le langage de dfinition de donnesLe langage de dfinition de donnes permet la modification du schma dune base de donnes.

    Il propose trois oprations : la cration (CREATE), la suppression (DROP) et la modification(ALTER). Par exemple, la cration dune table a pour syntaxe :

    CREATE TABLE table (dfinitions de colonnes [ contraintes detable]).

    Chaque dfinition de colonne comporte le nom de la colonne, son type et ventuellement une sp-cification de contraintes dintgrit. Il est galement possible de dfinir des contraintes dintgritsur la table. Les types de donnes supports sont les suivants :

    33

  • 4CHAPITRE 4. SQL ET REQUTES AGRGAT

    chanes de caractres de taille fixe, compltes droite par des espaces (CHAR(taille)), chanes de taille variable (VARCHAR(taille)), entiers sur 32 bits (INTEGER), nombres en prcision fixe (nbChiffres chiffres dont nbDecimales aprs la virgule) (NUMERIC(nbChiffres,

    nbDecimales)), nombres en virgule flottante simple prcision (REAL), nombres en virgule flottante double prcision (DOUBLE PRECISION), et types date et/ou heure (DATE/TIME/TIMESTAMP).Concernant les contraintes dintgrit, le principe de base est la cl dune table. La cl

    primaire dune table est un ensemble dattributs (souvent un seul attribut). Une combinaisonde valeurs de ces attributs dtermine au plus un nuplet de la table. En dautres termes, deuxnuplets de la table ne peuvent avoir la mme projection sur ces attributs. Une table peut avoirplusieurs cls. On dira dun cl dune table T quelle est une cl primaire si elle est utilse dansdautres tables pour identifier des nuplets de T . (Les autres cls seront dites cls candidates.)On appelle dans ce cas cl trangre un ensemble dattributs de lautre table faisant rfrence la cl primaire de T . Si on se rfre lexemple initial de la Figure 2.1, on voit que la tableCoordonnes a comme cl primaire lattribut Salle. Cet attribut devient une cl trangre dansla table Sance, rfrenant la table Coordonnes. Il faut noter que contrairement ce quonpourrait penser, lattribut Titre nest pas une cl primaire de la table Film, puisque sa valuationnest pas unique sur lensemble des nuplets de la table. Ainsi lattribut Titre de la table Sancenest pas une cl trangre non plus. Notons quil serait possible de normaliser le schma, pourobliger toutes les tables avoir une cl primaire. Cette opration est hors programme, mais nousallons donner un exemple un peu plus bas de transformations de ces relations pour crer destables avec des cls primaires.

    Ainsi, le langage DDL permet de spcifier quun ensemble dattributs est cl primaire (PRIMARYKEY), quune squence dattributs est cl trangre (FOREIGN KEY/REFERENCES). Il permetaussi de contraindre le domaine dun attribut (CHECK) ou quun ensemble dattributs ne contientpas de valeur manquante (NOT NULL). Enfin, il permet, la manire de PRIMARY KEY, deprciser quun ensemble dattributs ne contient pas de doublons (UNIQUE) ; la diffrence dePRIMARY KEY, il est possible de spcifier plusieurs UNIQUE sur la mme table.

    Par exemple, la requte DDL suivante cre la table Coordonnes.CREATE TABLE coordonnees(

    salle VARCHAR(30) PRIMARY KEY,adresse VARCHAR(255) UNIQUE NOT NULL,telephone VARCHAR(10)

    );

    Lattribut salle est la cl primaire donc annot par PRIMARY KEY. Les contraintes UNIQUEet NOT NULL sur adresse prcisent que cet attribut est une cl candidate.

    Le deuxime exemple permet de crer la table Film. Notons que nous allons sub-divisier latable originale prsente dans la Figure 2.1 en trois tables Film, Acteur et JouedansCREATE TABLE film(

    idfilm INTEGER(4) PRIMARY KEY,titre VARCHAR(255) NOT NULL,directeur VARCHAR(60) NOT NULL,annee YEAR(4) CHECK(annee > 1900),titre_vo VARCHAR(255),CONSTRAINT film_unique_titre_directeur UNIQUE (titre, directeur)

    );

    34

  • CHAPITRE 4. SQL ET REQUTES AGRGAT

    4

    CREATE TABLE acteur(idacteur INTEGER(4) PRIMARY KEY,nom VARCHAR(255),prenom VARCHAR(60),CONSTRAINT acteur_unique_nom_prenom UNIQUE (nom, prenom)

    );

    CREATE TABLE jouedans(idacteur INTEGER(4) REFERENCES acteur(idacteur),idfilm INTEGER(4) REFERENCES film(idfilm),PRIMARY KEY(idacteur, idfilm)

    );

    La contrainte rfrentielle prcise que les attributs idacteur et idfilm de la table Joue-dans sont des cls trangres des attributs et tables indiques dans la clause REFERENCES. Lescontraintes NOT NULL sur les attributs titre et directeur indiquent que ces valeurs doiventncessairement tre renseignes. En revanche, le titre_vo peut rester vide (il aura la valeurNULL). Notons que des attributs PRIMARY KEY sont galement NOT NULL, en revanche desattributs UNIQUE peuvent contenir de multiples valeurs nulles, mais seulement une valeur nonnulle donne.

    La contrainte de domaine sur annee limite aux valeurs suprieures 1900. La contraintede table PRIMARY KEY(equipe, no) sur la table Jouedans dfinit la cl primaire. En-fin, les contraintes de table nommes acteur_unique_nom_prenom et film_unique_-titre_directeur prcisent dautres cls candidates.

    Exercice : Ecrire la requte DDL pour crer la table Sance.

    CREATE TABLE seance(idfilm INTEGER(4) REFERENCES film(idfilm),salle VARCHAR(30) REFERENCES coordonnees(salle),horaire TIME,PRIMARY KEY(idfilm, salle)

    );

    4.2 Le langage de manipulation de donnes

    Maintenant que le schma de la BD a t dfini grce au langage DDL, il reste ajouter lesdonnes proprement dites dans la BD. Cest le rle du langage DML.

    Une insertion de n-uplets a la syntaxe suivante : INSERT INTO table [(liste dattributs)]VALUES (liste de valeurs) | requete. On peut prciser la liste des attributs ren-seigner : les autres valeurs sont alors fixes la valeur par dfaut de lattribut ou NULL. Laclause VALUES ajoute un n-uplet la fois alors que lutilisation dune requte la place deVALUES permet dinsrer plusieurs n-uplets en une seule opration (Bulk insert).

    La requte suivante permet lajout du n-uplet Le Champo, 51 rue des Ecoles, 0143545160dans la relation Coordonnes :

    INSERT INTO coordonneesVALUES(Le Champo, 51 rue des Ecoles, 0143545160);

    La deuxime requte insre un n-uplet en ne prcisant que les attributs salle et adresse.Ce n-uplet naura pas de valeur pour lattribut telephone (NULL). Notons que lordre desattributs nest pas forcment celui de la dfinition dans la table.

    35

  • 4CHAPITRE 4. SQL ET REQUTES AGRGAT

    INSERT INTO coordonnees(adresse, salle)VALUES(31 boulevard des Italiens, Gaumont Op\era);

    La troisime requte insere un n-uplet dans la table Film :

    INSERT INTO film(idfilm, titre, directeur, annee, titre_vo)VALUES(1, Les Oiseaux, Hitchcock, 1963, The Birds);

    Enfin, linsertion peut utiliser des requtes que nous considrerons dans la prochaine section.Par exemple, la requte suivante insre dans la table Sance tous les films de Hitchcock aucinma Le Champo.

    INSERT INTO seance(salle, idfilm)SELECT Le Champo, f.idfilmFROM film fWHERE directeur = Hitchcock

    Linstruction UPDATE modifie les valeurs des n-uplets dune table : UPDATE table SETliste daffectations [WHERE condition]. Lutilisation dune liste de valeurs per-met de modifier la valeur de plusieurs attributs. La clause WHERE dfinit les n-uplets qui serontmis jour.

    La requte suivante modifie lhoraire du film 1 de la salle Le Champo.

    UPDATE seanceSET horaire = 21:00

    WHERE salle = Le Champo AND idfilm = 1;

    Linstruction DELETE supprime des n-uplets dune table : DELETE FROM table [WHEREcondition]. La clause WHERE prcise les n-uplets supprimer.

    Par exemple, la requte suivante supprime le film 1 de la liste des films projets au Champo.

    DELETE FROM seanceWHERE idfilm=1 and salle=Le Champo;

    Sans clause WHERE, tous les n-uplets de la table sont supprims. Linstruction suivante effa-cerait tout le contenu de la table Sance.

    DELETE FROM seance;

    4.3 Linterrogation des donnes

    4.3.1 La syntaxe SQL du SELECT, FROM, WHERELe dernier aspect du langage SQL que nous tudierons est linterrogation des donnes grce

    linstruction SELECT :

    SELECT liste dexpressionsFROM liste de tablesWHERE conditionsGROUP BY liste dattributsHAVING conditionsORDER BY liste dattributs

    Les rles des trois prires lignes sont les suivants : La clause SELECT spcifie le schma de sortie (projection). La clause FROM prcise les tables impliques et leurs liens (produit cartsien et jointures).

    36

  • CHAPITRE 4. SQL ET REQUTES AGRGAT

    4

    La clause WHERE fixe les conditions que doivent remplir les n-uplets rsultats (slection).Les trois dernires clauses nous font sortir du calcul et de lalgbre relationnelle :

    La clause GROUP BY comment regrouper des nuplets (agrgation) ? La clause HAVING impose une condition sur les groupes (i.e. permet dliminer lintgralit

    dun groupe, en se basant sur la valeur dun agrgat calcul sur ce groupe). Enfin ORDER BY dfinit les critres de tris des rsultats.La clause SELECT est suivie dune liste dexpressions. Chaque expression peut tre un attri-

    but, un littral entre guillemet ou une expression calcule. Le caractre * est un joker signifiant tous les attributs de la table . Il est noter que la clause SELECT ninterdit pas a priori lesdoublons, i.e. plusieurs n-uplets gaux. Alors que le modle relationnel et lalgbre manipulentdes ensembles, en SQL, une table nest pas un ensemble de n-uplets mais un multi-ensemble. Laraison en est simple : liminer les doublons est coteux. Les requtes SELECT/FROM/WHEREsont dfinies sur des multi-ensembles par dfaut. Pour se ramener un ensemble et donc liminerles doublons, il faut alors utiliser DISTINCT dans la clause SELECT.

    4.3.2 Traduction en calcul relationnel

    La traduction en calcul relationnel est directe, et se fait de la manire automatique suivante.Soit une requte SQL Q de la forme :

    SELECT A1, A2, . . . , AnFROM R1, R2, . . . , RmWHERE CONDITION(A1, . . . , An, An+1, . . . , An+k)

    Une expression de calcul relationnel correspondante se dduit directement par la relation sui-vante :

    res = {A1, A2, . . . , An|An+1, . . . , An+k, (CONDITIONcalcul(A1, . . . , An+k)}

    o CONDITIONcalcul lie les attributs aux tables correspondantes, ce qui de fait gnre lesjointure, ainsi que les conditions de restriction de la clause WHERE.

    Notons pour tre prcis que la requte SQL a pour rsultat un multi-ensemble, contenantpeut-tre des doublons. Il faudrait utiliser DISTINCT pour les liminer.

    4.3.3 Traduction en algbre relationnelle

    La traduction en algbre relationnelle se fait de la manire suivante :piA1,...,An(CONDITION (R1 R2 . . .Rm)Notons que nous considrons ici dans la clause FROM uniquement des tables et donc le produit

    cartsien. Nous verrons plus tard quil est possible dindiquer directement dans cette clause FROMdes jointures, ce qui change lgrement la traduction.

    4.3.4 Exemple de requtes

    1. Nom et prnom des acteurs

    SQL SELECT nom, prenomFROM acteur;

    Algbre pinom,prenom(Acteur)Calcul res = {xnom, xprenom | xid,Acteur(xid, xnom, xprenom)}2. Tous les attributs des acteur

    37

  • 4CHAPITRE 4. SQL ET REQUTES AGRGAT

    SQL SELECT *FROM acteur;

    Algbre piidacteur,nom,prenom,age(Acteur)Calcul res = {xid, xnom, xprenom | Acteur(xid, xnom, xprenom)}3. Noms des acteurs (sans doublons) pour SQL. Lalgbre et le calcul travaillent directement

    sur des ensembles et non des multi-ensembles.

    SQL SELECT DISTINCT nomFROM acteur;

    La clause FROM accepte en paramtre une liste de tables. La requte porte alors sur leproduit cartsien de ces tables. Pour effectuer une jointure entre les tables, il convient dutiliserles oprateurs de jointure du langage. Le mot-cl JOIN plac entre deux tables indique quilfaut en faire la jointure. La condition de jointure est prcise avec le mot-cl ON. Une jointurenaturelle sexprime avec le mot-cl NATURAL JOIN.

    Lexemple suivant montre deux requtes de jointure.

    1. Titre dun film avec la liste des identifiants de ses acteurs. Dans le cas de lalgbre, onutilise la jointure naturelle, cest--dire que ce sont les attributs ayant le mme nom dansles deux tables jointes qui sont choisis, et loprateur utilis est lgalit.

    SQL SELECT f.titre AS titre, jd.idacteur AS idFROM film f JOIN jouedans jd ON f.idfilm = jd.idfilm;

    ou bien SELECT f.titre AS titre, jd.idacteur AS idFROM film f jouedans jdWHERE f.idfilm = jd.idfilm;

    Algbre pititre,idacteur(Film ./ Jouedans)ce qui signifie pititre,idacteur(Film ./Film.idfilm=Jouedans.idfilm Jouedans)

    Calculres = {titre, idacteur | (idfilm, directeur, annee),

    Film(idfilm, titre, directeur, annee)Jouedans(idfilm, idacteur)}

    2. Les noms des salles projetant un film de Hitchcock.

    SQL SELECT f.titre AS titre, s.salle AS cinemaFROM film f, seance sWHERE f.idfilm = s.idfilmAND f.directeur = HitchcockAND s.horaire IS NOT NULL;

    Algbre pititre,salle((directeur=HitchcockFilm) ./ Sance)

    Calculres = {titre, salle | (idfilm, annee, horaire),

    Film(idfilm, titre, Hitchcock, annee)Sance(idfilm, salle, horaire)}

    On pourra sinterroger sur loptimalit de lexpression dalgbre relationnelle du 2e exemple.Dans lexemple, des alias dattributs et de tables sont utiliss : la syntaxe AS cinema dans

    la clause SELECT permet de renommer la colonne en sortie, la syntaxe film f dfinit f commealias de la table film.

    La clause WHERE permet dexprimer la slection. SQL supporte des oprateurs de comparai-son (, ), logiques (AND, OR), de test de valeur manquante (IS NULL,IS NOT NULL), de recherche textuelle (LIKE), de slection dintervalle (BETWEEN), de liste(IN), et dimbrication de blocs (IN, EXIST, NOT EXIST, ALL, SOME, ANY).

    Les requtes suivantes illustrent ces notions.

    1. Titre des films datant davant 2000

    38

  • CHAPITRE 4. SQL ET REQUTES AGRGAT

    4

    SQL SELECT titre FROM filmWHERE annee < 2000;

    Algbre pititre(annee2013 annee 2000)(annee < 2013)}

    4.4 Requtes agrgats

    Cette section discute de traitements dagrgation (e.g. calcul de moyenne) qui ne sont pascouverts par lalgbre relationnelle classique et le calcul relationnel. Nous expliquons ici le prin-cipe sur SQL, et tendons lalgbre pour reprsenter ces concepts. Nous ne considrons doncplus ici le calcul relationnel.

    Les fonctions dagrgation, les clauses GROUP BY et HAVING permettent de rsumer un ensemble de n-uplets. La clause GROUP BY prcise les attributs de groupement. Les fonc-tions dagrgation sont ensuite appliques sur chaque groupe. Enfin, la clause HAVING per-met de spcifier des conditions sur les groupes. Il sagit donc ici dune condition globale ungroupe. Ces conditions peuvent tre la valeur min, max, moyenne, ou la somme dun attributa sur un groupe (MIN(a), MAX(a), AVG(a), SUM(a)), le nombre de lignes dun groupe(COUNT(*)), ou le nombre de lignes dun groupe ayant une valeur distincte dun attribut aparticulier (COUNT(distinct a)).

    Anne de production moyenne des filmsSQL SELECT AVG(annee)FROM film;Algbre AV G(annee)(Film) Nombre total de films dans lequel chaque acteur jouSQL SELECT idacteur AS id, COUNT(*)AS Nb_films

    FROM film f NATURAL JOIN jouedans jdGROUP BY idacteur

    Algbre r1 = Film ./ JouedanspiidacteurCOUNT ()(r1)

    Anne de production la plus ancienne pour chaque acteur ayant jou dans au moins 3 filmsde Hitchcock.

    SQL SELECT idacteur, MIN(annee)AS annee_debutFROM film f NATURAL JOIN jouedans jdWHERE f.directeur=Hitchcock GROUP BY idacteurHAVING COUNT(*)> 2;

    Algbre r1 = directeur=HitchcockFilm ./ Jouedansr2 = MIN(annee)annee_debut)(idacteurMIN(annee),COUNT ()(r1))piannee_debut,idacteurCOUNT ()>2(r2)

    39

  • 4CHAPITRE 4. SQL ET REQUTES AGRGAT

    4.5 Requtes ensemblistesSQL permet galement de regrouper les rsultats de plusieurs requtes laide doprations

    ensemblistes. La requte requete1 UNION requete2 retourne lunion des rsultats des deuxrequtes. La requte requete1 INTERSECT requete2 retourne lintersection des rsultats desdeux requtes. La requte requete1 EXCEPT requete2 retourne la diffrence des rsultatsdes deux requtes. Pour ces trois oprations, les schmas des requtes doivent tre compatibles(mme nombre dattributs, mme types). Ces oprations seffectuent sur des ensembles, i.e. lesdoublons sont limins. Le mot-cl ALL ajout aprs un oprateur ensembliste vite lliminationdes doublons et permet donc de manipuler des multi-ensembles.

    4.6 TriUne dernire clause ORDER BY permet de spcifier un tri des rsultats. Donc nous sommes

    passs des ensensembles, aux multi-ensembles, pour atteindre les listes. On notera que les tablesstockes sont des ensembles et pas des multi-ensembles ou des listes.

    La clause ORDER BY est suivie dune liste dattributs pour lesquels on prcise lordre de tri(ASC pour croissant, DESC pour dcroissant). Cette clause, qui na pas dquivalent en algbrerelationnelle, ne doit apparatre quune seule fois dans une requte et obligatoirement la fin.En effet, elle transforme un ensemble de n-uplets en liste de n-uplets pour reprsenter lordre. Ilnest donc pas possible dappliquer un autre oprateur sur le rsultat de cette clause.

    Par exemple, Nom et prnom des acteurs tris en ordre croissant selon le nom puis le prnom

    SELECT nom, prenom FROM acteurORDER BY nom ASC, prenom ASC;

    40

  • 5 Exercices5.1 Objectif du chapitre

    Le programme officiel propose trois activits (ou exercices) que nous dtaillerons dans laSection 5.2 : utiliser une application de cration et de manipulation de donnes, offrant une interface

    graphique, notamment pour crer une base de donnes simple, ne comportant pas plus detrois tables ayant chacune un nombre limit de colonnes. Linstallation et lexploitationdun serveur SQL ne fait pas partie des attendus.

    lancer des requtes sur une base de donnes de taille plus importante, comportant plusieurstables, que les tudiants nauront pas eu construire, laid