Cours de Nacéra Bennacer - Département informatique
Transcription
Cours de Nacéra Bennacer - Département informatique
Bases de données relationnelles et SQL [email protected] Département informatique de Supélec 24 juin 2014 Bases de données relationnelles et SQL Plan 1 Modèle entité-association EA (Entity-Relationship ER) 2 Modèle relationnel 3 Normalisation 4 Passage du modèle ER au modèle relationnel 5 Algèbre relationnelle 6 Langage de requêtes SQL Bases de données relationnelles et SQL Modèle entité-association EA : Entité Repésentation conceptuelle d’une entité concrète ou abstraite du monde réel décrire les données sans prise en compte des opérations chaque entité possède une identité et un ensemble d’attributs chaque attribut, peut être monovalué ou multivalué décrire la relation is-a entre entités : une entité hérite des attributs de l’entité qu’elle spécialise Origines : Charles Bachman (1969), Peter Chen (1976) Bases de données relationnelles et SQL Modèle entité-association EA : Entité Bases de données relationnelles et SQL Modèle entité-association EA : Association Exprimer des relations entre n entités (d’arité n ou n-aire) Cardinalités minimale et maximale portées par chaque extrémité de l’association si E (n..m) − (k..l)E 0 alors ∀e de type E , e est relié au minimum à n et au maximum à m entités de type E 0 Association peut avoir des attributs Association peut être reflexive Bases de données relationnelles et SQL Modèle entité-association EA : Exemples * désigne 0..n Bases de données relationnelles et SQL Modèle relationnel : Définition Introduite par E. F. Codd Relation R(A1 , A2 , . . . An ) sur (D 1 , D 2 , . . . D n ) Ai est attribut de domaine D i de valeurs atomiques ai Intention de R A = {A1 , A2 , . . . An } et un ensemble de dépendances F défini sur A Extension de R, Ext(R), est l’ensemble de tuples (ou n-uplets) : {(a1 , a2 , . . . an ) ∈ (D 1 xD 2 x . . . D n )} Ex. : Produit(numRef, designation, prixUnitaire, qteStock), Client(numClient, nom, prenom, adresse, numTel) –> une seule valeur de numéro de téléphone par client Bases de données relationnelles et SQL Modèle relationnel : Dépendance fonctionnelle Définition Exprimer les dépendances entre attributs de relations Soit R(A), X ⊂ A détermine Y ⊂ A noté X → Y ssi : ∀(aX , aY ), (a0X , a0Y ) aX = a0X → aY = a0Y aX : suite de valeurs des attributs de X d’un tuple a ∈ Ext(R(A)) Ex. : numSecu → nom, prenom, adresse titre, realisateur → dateSortie, nationalite, budget commune, departement → codePostale ville → pays ? ? identifiantBillet → identifiantSiege Raisonner sur les DFs : règles d’inférence d’Armstrong (transitivité, augmentation, reflexivité, . . . ) fermeture transitive & couverture minimale de DFs Bases de données relationnelles et SQL Modèle relationnel : Dépendance fonctionnelle DF élémentaire et clés d’une relation Dépendance fonctionnelle élémentaire X → Y ssi : 6 ∃X 0 ⊂ X , X 0 → Y Ex. : salle, creneau, professeur → module, groupe n’est pas une DFe si salle, creneau → module, groupe Soit R(A), X ⊂ A est une clé de R ssi : X → Y est une DFe et Y = A − X Ex. : EmploiDutemps(creneau, salle, professeur, groupe, module) creneau, salle → professeur, groupe, module creneau, professeur → salle, groupe, module creneau, groupe → salle, professeur, module Film(titre, realisateur, dateSortie, nationalite, budget, numExploitation) titre, realisateur → dateSortie, nationalite, budget, numExploitation numExploitation → titre, realisateur, dateSortie, nationalite, budget Super clé si X = A Bases de données relationnelles et SQL Normalisation : Objectifs Construire un schéma relationnel ayant les qualités permettant de : préserver les dépendances et les données lors des mises à jour minimiser la redondance Ex. : Produit(numRef, designation, prixUnitaire, fournisseurNom, fournisseurAdresse, qteStock) numRef→designation, prixUnitaire, fournisseurNom, fournisseurAdresse, qteStock fournisseurNom→fournisseurAdresse Redondance : nom et adresse fournisseur si mise à jour de l’adresse fournisseur si un produit est supprimé si un produit est inséré Bases de données relationnelles et SQL Normalisation : 1ère forme normale Une relation est 1FN ssi toute valeur d’attribut pour un tuple est atomique une valeur d’attribut ne peut pas être multivaluée une valeur d’attribut ne peut pas être composée Ex. : Personne(nom, prenom, adresse, numTel) prenom et numTel ne peuvent pas avoir plusieurs valeurs adresse ne peut être décomposée en numéro, rue, code postale, commune, ville Par définition dans le modèle relationnel Bases de données relationnelles et SQL Normalisation : 2ème forme normale Soit R(A, F ), X est une clé de R, Y = A − X , R(A, F ) est 2FN ssi : 6 ∃X 0 ⊂ X et 6 ∃Y 0 ⊂ Y X 0 → Y 0 ∈ F les attributs non-clés pleinement dépendants de cette clé Ex. : EmploiDutemps(creneau, salle, professeur, groupe, module) creneau, professeur → salle, groupe, module et si professeur → module module dépend partiellement de la clé (creneau, professeur) Bases de données relationnelles et SQL Normalisation : 3ème forme normale Soit R(A, F ), X est une clé de R, Y = A − X , est 3FN ssi : R(A, F ) est en 2FN 6 ∃Y 0 , Y 00 ⊂ Y Y 0 → Y 00 ∈ F attributs non-clés pleinement, directement dépendants de cette clé Ex. : EmploiDutemps(creneau, salle, professeur, groupe, module) creneau, salle → professeur, groupe, module et si professeur → module module dépend transitivement de la clé (creneau, salle) Fonctionnaire(numen, nom, categorie, classe, salaire) numen → nom, categorie, classe, salaire categorie, classe → salaire salaire est transitivement dépendant de numen Algorithmes de décomposition en relations : 1 relation constituée que des attributs clés et non clés respectant 2FN, 3FN Bases de données relationnelles et SQL Passage du modèle ER au modèle relationnel : Règles Tout attribut multivalué de E devient une entité E 0 en association E 0 (0..1) − ∗E ou E 0 ∗ − ∗ E Toute entité devient une relation dont les attributs sont ceux de l’entité Toute association reliant E à E 0 devient une relation qui possède : les attributs de la clé de E et de la clé de E 0 les attributs de l’association la clé de la nouvelle relation contient au moins les clés de E et E 0 Cas association sans attributs E (0..1) − ∗E 0 ajouter les attributs de E 0 dans E Cas is-a ajouter à toute entité les attributs clé de l’entité dont elle hérite, ces attributs sont également une clé de l’entité Bases de données relationnelles et SQL Passage du modèle ER au modèle relationnel : Exemples Client(numClient, nom, prenom, adresse) Commande(numCommande, date, montant, # numClient) Produit(numRef, designation, prixUnitaire, qteStock, # nom) LigneCommande( # numRef, # numCommande, qte) Fournisseur(nom, adresse) Telephone(numero, #numClient) Bases de données relationnelles et SQL Passage du modèle ER au modèle relationnel : Exemples Personne(nom, prenom) ; estParent(# (nom, prenom),# (nom, prenom)) Sport(nomSport) ; JeuxOlympiques(date, ville) ; Sportif (nom, nationalite) ; Figuration (# nom, #date, #nomSport, resultat) Bases de données relationnelles et SQL Algèbre relationnelle : Opérateurs algébriques Produit cartésien de deux relations R(C ) = Ri (A) × Rj (B) Ext(R) = {(t A , t B )/t A ∈ Ext(Ri ), t B ∈ Ext(Rj ) } C = A ∪ B, |C | = |A| + |B| Sélection d’une relation R 0 (C ) = σ(R(C ), δ), δ est une expression booléenne Ext(R 0 ) = {(t/t ∈ Ext(R), δ(t) } Projection d’une relation R 0 (B) = π(R(C ), B) B ⊆ C , Ext(R 0 ) = {t B /t ∈ Ext(R)} Union R(C ) = Ri (C ) ∪ Rj (C ), Ext(R) = Ext(Ri ) ∪ Ext(Rj ) Différence R(C ) = Ri (C ) − Rj (C ), Ext(R) = Ext(Ri ) − Ext(Rj ) Bases de données relationnelles et SQL Algèbre relationnelle : Exemple piece ecrou ecrou boulon piece ecrou ecrou boulon - R fournisseur Pierre Paul Alice R fournisseur Pierre Paul Alice - S fournisseur Pierre Alice Pierre - piece ecrou boulon boulon V piece ecrou boulon boulon - projet a b c - R ∪S R −S fournisseur piece fournisseur Pierre ecrou Paul Pierre Paul Alice R ×V fournisseur V.piece projet Pierre ecrou a Pierre boulon b Pierre boulon c Paul ecrou a Paul boulon b Paul boulon c Alice ecrou a Alice boulon b Alice boulon c piece ecrou boulon ecrou boulon R.piece ecrou ecrou ecrou ecrou ecrou ecrou boulon boulon boulon Bases de données relationnelles et SQL Algèbre relationnelle : Exemple piece ecrou ecrou vis boulon R fournisseur Pierre Paul Paul Alice projet a a a c π(R, {fournisseur , projet}) fournisseur projet Pierre a Paul a Alice c - σ(R, (fournisseur =0 Paul 0 )) piece fournisseur projet ecrou Paul a vis Paul a - Combiner les opérateurs algébriques : expression de requêtes complexes Exploiter leurs propriétés : algorithmes de réécriture et d’optimisation de requêtes. Bases de données relationnelles et SQL Langage de requêtes SQL : Petite introduction Base de données (BdD) : ensemble structuré de données stockées dans un support persistant en vue de son utilisation (en local ou à distance) par des programmes. Système de Gestion de Bases de Données (SGBD) gère le stockage et l’accès à une BdD Système de Gestion de Bases de Données Relationnel (SGBDR) implémente le modèle relationnel Sybase, Oracle, SQLServer, DB2, . . . MySQL, PostgreSQL , OpenIngres , . . . SQL ("Structured Query Language") est le langage de requêtes SQL-1 en 1989, SQL-2 en 1992, SQL-3 en 1999 Définition de schéma relationnel (LDD), manipulation de données (LMD), de contrôle des accès aux données (LCD) Bases de données relationnelles et SQL Langage de requêtes SQL : Définition de schéma relationnel Création et suppression de tables create table t ( col sqlType default value, col sqlType [constraint c] primary key || unique || not null || check(condition) || references t (col) [on delete cascade], [constraint c] primary key || unique (col[, ...]) || check(condition) foreign key(col[, ...]) [on delete cascade], [...] ) drop table t [cascade constraints] Notation : t, col et c sont resp. le nom d’une table, colonne et contrainte sqlType : integer, varchar, date, text, ... [] : optionnel, || : ou Bases de données relationnelles et SQL Langage de requêtes SQL : Exemple de la vidéothèque http ://wwwdi.supelec.fr/liesse/html/index.html create table Film ( idFilm integer primary key, titre_VO text, titre_VF text, annee integer, pays text) ; create table Personne ( idPersonne integer primary key, nom text) ; create table Acteur ( idPersonne integer, idFilm integer, constraint Fk1Acteur foreign key(idPersonne) references Personne(idPersonne), constraint Fk2Acteur foreign key(idFilm) references Film(idFilm), constraint UnActeur unique(idFilm, idPersonne)) ; create table Realisateur ( idPersonne integer, idFilm integer, constraint Fk1Realisateur foreign key(idPersonne) references Personne(idPersonne), constraint Fk2Realisateur foreign key(idFilm) references Film(idFilm), constraint UnRealisateur unique(idFilm, idPersonne)) ; Bases de données relationnelles et SQL Langage de requêtes SQL : Exemple de la vidéothèque create table Exemplaire ( numInventaire integer primary key, idFilm integer, format varchar(8), constraint FkExemplaire foreign key(idFilm) references Film(idFilm) constraint CkExemplaire check(format in (’DVD’, ’Blu-ray’))) ; create table Client ( numClient integer primary key, prenom text, nom text, ville text, credit numeric, bonus numeric) ; create table Emprunte ( numClient integer, numInventaire integer, dateEmprunt Date, constraint Fk1Emprunte foreign key(numClient) references Client(numClient), constraint Fk2Emprunte foreign key(numInventaire) references Exemplaire(numInventaire), constraint PkEmprunte primary key(numInventaire, numClient, dateEmprunt) ) ; Bases de données relationnelles et SQL Langage de requêtes SQL : Altérer un schéma existant alter table t add/modify (col sqlType[,. . . ]) ; alter table t add constraint c primary key || unique (col[, ...]) ; alter table t add constraint c foreign key (col[, ...]) references t(col[, ...]) ; alter table t drop constraint c [cascade] ; alter table t drop primary key||unique(col[, ...]) [cascade] ; alter table t enable || disable c [cascade] ; alter table t modify constraint c disable ; alter table t1 rename to t2 ; rename constraint c1 to c2 ; Bases de données relationnelles et SQL Langage de requêtes SQL : Mise à jour des données insert into t values( val[, . . . ]) ; insert into t (col[, . . . .]) values( val[, . . . ]) ; insert into t [(col[, . . . ])] select . . . ; update t set col = expression [, . . . .] [where condition] ; update t set (col[,. . . ]) = select . . . [where condition] ; delete from t [where condition] ; Bases de données relationnelles et SQL Langage de requêtes SQL : Exercice Insérer les films suivants : - L’Associé du diable, The Devil’s Advocate, 1998, USA, réalisé par Taylor Hackford avec acteurs principaux Al Pacino, Keanu Reeves, Charlize Theron. - Scarface, 1983, USA, réalisé par Brian De Palma avec acteurs principaux Al Paccino, Michelle Pfeiffer, Steven Bauer - Into the Wild, 2007, USA, réalisé par Sean Penn avec acteur principal Emile Hirsch Bases de données relationnelles et SQL Langage de requêtes SQL : Sélection de données select [distinct] col [, . . . .] || * from t [, ...] [where condition] [order by col [, . . . .] ] ; par défaut, s’affiche à l’écran, peut servir pour une autre clause from, ou clause where (sous-requête) select col [, . . . .] from t [, . . . .][ where condition] union || intersect || minus select col [, . . . .] from t [, . . . .][ where condition] [order by col [, . . . .] ] ; Bases de données relationnelles et SQL Langage de requêtes SQL : Sélection de données Condition de la clause where : exp > || >= || < || <= || = || <> || ! = exp exp [not] between exp and exp exp [not] in (valeur,[...]) exp [not] like chaîne (méta-caractères comme _ et %) attribut is [not] null exp : attribut, constante numérique ou alphanumérique ou date, fonctions prédéfinies ou une expression numérique utilisant +, ∗, −, / Condition composée : not, or, and. Bases de données relationnelles et SQL Langage de requêtes SQL : Exercice Donner les films plus récents que 2008 Donner la liste des films de nationalité française et dont la date de sortie est entre 1960 et 2000 Donner la liste des clients dont la ville est Gif-sur-Yvette et dont le bonus est entre 0 et 1 Donner les identifiants des personnes acteurs et réalisateurs Donner les identifiants des films et des personnes réalisant ou jouant dans ces films ordonnées par film Bases de données relationnelles et SQL Langage de requêtes SQL : Produit cartésien et jointures Produit cartésien select [distinct] col [, ...] from t, t’ [, ...] ; ou select [distinct] col [, ...] from t cross join t’[cross join ...] ; Jointure select [distinct] col [, ...] from t, t’[...] where conditionJointure ; ou select [distinct] col [, ...] from t inner join t’ on (conditionJointure) [inner join ...] ; Jointure naturelle select [distinct] col [, ...] from t natural join t’ [natural join ...] ; Bases de données relationnelles et SQL Langage de requêtes SQL : Jointure externe Jointure externe gauche select [distinct] col [, ...] from t left outer join t’ on (conditionJointure) [left outer join ...] ; Jointure externe droite select [distinct] col [, ...] from t right outer join t’ on (conditionJointure) [right outer join ...] ; Jointure externe complète select [distinct] col [, ...] from t full outer join t’ on (conditionJointure) [full outer join ...] ; Bases de données relationnelles et SQL Langage de requêtes SQL : Exercice Quels sont les films dans lesquels joue "Belmondo" ? Quels sont les réalisateurs du film "Gran Torino" ? Quels sont les films où "Clint Eastwood" est à la fois réalisateur et acteur ? Quels sont les films où jouent Alain Delon et Simone Signoret ? Quels sont les exemplaires de films de Claude Chabrol actuellement disponibles en location ? Bases de données relationnelles et SQL Langage de requêtes SQL : Sous-requêtes Requête dont le résultat sert de valeur de référence dans le prédicat de la requête principale. where (exp[, ...]) operateur (select col[, . . . ]) où (exp[, ...]) doit correpondre à col[, . . . ] opérateur : =, ! =, <>, <, >, <=, >= suivi de all ou any. = any est équivalent à in ! = all est équivalent à not in where exists select . . . renvoie vrai si le select renvoie au moins une ligne sinon faux Bases de données relationnelles et SQL Langage de requêtes SQL : Exercice Reprendre les requêtes précédentes et utiliser les sous-requêtes si possible. Bases de données relationnelles et SQL requêtes de groupage Grouper les lignes ayant les mêmes valeurs sur des attributs sélectionnés select [distinct] col [, ...] ou * from t [, ...] [where condition] [group by col [, . . . ] ] [having condition] [order by col [, . . . ] [asc || desc]] [Limit n] ; Une seule ligne par groupe Les colonnes projectées doivent faire partie des colonnes du group by Les colonnes projetées peuvent être des fonctions d’agrégats appliquées aux autres attributs count (*), count(distinct col), sum(), avg() La condition du having s’applique aux groupes Bases de données relationnelles et SQL Langage de requêtes SQL : Exercice Donner le nombre de films par nationalité. Donner le nombre de films par nationalité et par année Donner le nombre d’exemplaires par format Donner les 10 Films possédant le plus d’exemplaires Donner la liste des villes par ordre décroissant en termes de nombre de clients Bases de données relationnelles et SQL