Bases de données relationnelles et SQL - 24 juin 2014
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Bases de données relationnelles et SQL Nacera.Bennacer@supelec.fr 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 R S R ∪S R −S piece fournisseur piece fournisseur piece fournisseur piece fournisseur ecrou Pierre ecrou Pierre ecrou Pierre ecrou Paul ecrou Paul boulon Alice boulon Pierre - - boulon Alice boulon Pierre ecrou Paul - - - - - - boulon Alice - - R V R ×V piece fournisseur piece projet R.piece fournisseur V.piece projet ecrou Pierre ecrou a ecrou Pierre ecrou a ecrou Paul boulon b ecrou Pierre boulon b boulon Alice boulon c ecrou Pierre boulon c - - - - ecrou Paul ecrou a - - - - ecrou Paul boulon b - - - - ecrou Paul boulon c - - - - boulon Alice ecrou a - - - - boulon Alice boulon b - - - - boulon Alice boulon c Bases de données relationnelles et SQL
Algèbre relationnelle : Exemple R π(R, {fournisseur , projet}) σ(R, (fournisseur =0 Paul 0 )) piece fournisseur projet fournisseur projet piece fournisseur projet ecrou Pierre a Pierre a ecrou Paul a ecrou Paul a Paul a vis Paul a vis Paul a Alice c - - - boulon Alice c - - - - - 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 > || >= || < ||
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
Vous pouvez aussi lire