Bases de données relationnelles et SQL - 24 juin 2014

La page est créée Lucas Julien
 
CONTINUER À LIRE
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