Conception de bases de donn ees relationnelles - limsi

La page est créée Adrien Coste
 
CONTINUER À LIRE
Conception de bases de donn ees relationnelles - limsi
Conception de bases de données relationnelles
                     Langage SQL

         Anne-Laure Ligozat & Marie Szafranski

                    2018-2019   ensiie           1
Langages SQL

                               SQL

     LMD
                   LDD
  manipulation                               LCT        LCD
                 définition
   de données                          transactions   contrôle
                 de données
   SELECT                                 BEGIN        des accès
                  CREATE                 COMMIT
   INSERT                                              GRANT
                   ALTER
   UPDATE                               ROLLBACK       REVOKE
                   DROP
    DELETE

                        2018-2019   ensiie                          2
LDD : langage de définition des données

LDD : langage de définition des données
  Métabase
  Création d’objets
  Modification d’objets
  Suppression d’objets

Langage de contrôle des transactions

LCD : langage de contrôle des données

                                          2018-2019     ensiie   3
LDD : langage de définition des données    Métabase

LDD : Langage de Définition des Données
vs LMD : Langage de Manipulation des Données

            LDD           administrateur

         métabase                        SGBD

                      décrit
                                            BD

                                           LMD           développeur applications

                                           2018-2019     ensiie                      4
LDD : langage de définition des données   Métabase

Métabase
  • schéma = description du type des données contenues dans la BD
  • métabase = schéma organisé sous forme d’une BD relationnelle

Le contenu de la métabase est :
  • manipulé par le LDD
  • consultable par des commandes ad hoc (\d, \d relation, show
    tables...)

                                          2018-2019     ensiie        5
LDD : langage de définition des données   Métabase

Métabase
Exemple :
CREATE TABLE vin(
  n vin INTEGER CONSTRAINT clé vin PRIMARY KEY,
  cru VARCHAR (30),
  millesime CHAR(4),
  n viticulteur INTEGER CONSTRAINT cle etr vin vitic
  REFERENCES viticulteur); )

met à jour au moins 3 tables de la métabase :
  • TABLES : ajoute le tuple de vin
  • COLUMNS : ajoute les tuples de n vin, cru, millesime,
    n viticulteur
  • CONSTRAINTS : ajoute les tuples de primary-key et
    cle etr vin vitic

                                          2018-2019     ensiie      6
LDD : langage de définition des données    Métabase

LDD : Langage de Définition des Données
  • Création ou mise à jour des objets gérés par le SGBD
                                                            Schéma

                                                Tables       Vues            Contraintes

                            colonnes             clés            domaines

  • Trois types de commandes

                         LDD                  LMD
                         create               insert         création
                         alter                update         modification
                         drop                 delete         suppression
                         métabase            base

                                          2018-2019      ensiie                            7
LDD : langage de définition des données    Création d’objets

Création d’attributs - types principaux de données
                                                                                          integer

                                                                      entiers            smallint

                                                                                           bigint

                            numériques                                               decimal [(p, s)]
                                                              précision arbitraire
                                                                                      numeric [(p, s)]

                                                                virgule flottante        float (p)

                                                                   char (n)
         types               caractères                          varchar (n)

                                                                      text

                                                             date (’AAAA-MM-JJ’)
                             date/heure
                                                   datetime (’AAAA-MM-JJ HH:MM:SS’)
                                  ...

et beaucoup d’autres comme booléens, monétaires, énumérations, géométriques,
composites, pseudo-types... (voir documentation)
                                               2018-2019     ensiie                                      8
LDD : langage de définition des données       Création d’objets

Création de domaines
CREATE DOMAIN   [DEFAULT ] ;

CREATE DOMAIN nom-domaine         type-données                                                         ;
                                                          DEFAULT valeur-défaut   contrainte-domaine

Exemples :
 CREATE DOMAIN num-etape INTEGER CHECK (VALUE BETWEEN 1 AND 5);

 CREATE DOMAIN date-contrat DATE DEFAULT CURRENT DATE CHECK (VALUE >
 ’2017-01-01’);

 CREATE DOMAIN entier positif INTEGER CHECK (VALUE > 0);

                                            2018-2019        ensiie                                     9
LDD : langage de définition des données   Création d’objets

Création de relations
Définition d’un schéma de relation en intension
CREATE TABLE (
    ,
  .
  .
  .
    );
)
Ligne :
          nom-attribut            type-données

                                  nom-domaine                               contrainte-attribut

  CREATE TABLE Super heros(
     nom super VARCHAR(20),
     nom civil VARCHAR(20),
     prenom VARCHAR(20),
     age INTEGER
  );
                                              2018-2019     ensiie                                10
LDD : langage de définition des données   Création d’objets

Contraintes d’intégrité
Définition et contrôle de la cohérence d’une (ensemble de) donnée(s)

Contrainte sur un attribut                                          (Après la définition d’un attribut)

  • Valeur par défaut                                                               DEFAULT 
  • Valeur obligatoire                                                                         NOT NULL
  • Clé primaire (⇒ UNIQUE NOT NULL)                                                      PRIMARY KEY
  • Unicité                                                                                     UNIQUE
  • Intégrité référentielle                             REFERENCES  ()
  • Validité (restriction de domaine)                                           CHECK ()

 CREATE TABLE Super heros(
   nom super VARCHAR(20) PRIMARY KEY,
   nom civil VARCHAR(20),
   prenom VARCHAR(20),
   age INTEGER (CHECK age > 18));
                                             2018-2019     ensiie                                       11
LDD : langage de définition des données    Création d’objets

Contraintes d’intégrité
Contrainte sur une table                                   (Après la définition de tous les attributs)

  • Clé primaire                                              PRIMARY KEY ()
  • Unicité                                                                UNIQUE (liste d’attributs)
  • Intégrité référentielle                                FOREIGN KEY ()
                                                   REFERENCES  ()
  • Validité (restriction de domaine)                                            CHECK ()

 CREATE TABLE Super heros pouvoirs(
   super VARCHAR(20),
   pouvoir VARCHAR(20),
   CONSTRAINT pk SHP PRIMARY KEY (super, pouvoir),
   FOREIGN KEY (super) REFERENCES Super heros (super),
   FOREIGN KEY (pouvoir) REFERENCES Super pouvoirs (nom pouvoir));

                                             2018-2019     ensiie                                      12
LDD : langage de définition des données   Création d’objets

Contraintes de clés en détail
Clé primaire

   • 1 attribut : déclaration après l’attribut ou après tous les attributs
   • plusieurs : déclaration après tous les attributs
   • ⇒ unique not null

Clé étrangère

   • syntaxe :
FOREIGN KEY (attribut1 [, ... ]) REFERENCES table reference [ (attribut ref 1 [, ... ]) ]
(si c. de relation)
   • si attribut ref 1 omis, clé primaire de table reference utilisée
   • peut être NULL

                                             2018-2019     ensiie                       13
LDD : langage de définition des données   Création d’objets

Contraintes d’intégrité                                         (Autre exemple)
CREATE TABLE Personne(                                                         
  n ss CHAR(13) PRIMARY KEY,                                                   
                                                                               
                                                                               
                                                                               
  nom VARCHAR(25) NOT NULL,                                                    
                                                                               
                                                                               
                                                                               
  prenom VARCHAR(25) NOT NULL,                                                  contraintes
                                                                               
                                                                               
                                                                               
  ddn DATE CHECK (ddn > ’1900-01-01’),                                            d’attributs
  mariage CHAR(13) REFERENCES Personne(n ss),                                  
                                                                               
                                                                               
  code postal INTEGER(5),
                                                                               
                                                                               
                                                                               
                                                                               
  pays VARCHAR(50),
                                                                               
                                                                               
                                                                               
                                                                               
  courriel VARCHAR(50) CHECK (courriel LIKE ’%@%.%’),
                                                                               
  CONSTRAINT ck Personne UNIQUE (nom, prenom, courriel),                      
                                                                                       contraintes
  CONSTRAINT fk Personne Pays FOREIGN KEY (code postal,                       
                                                                              
pays)                                                                                 de relations
                                                                              
  REFERENCES Adresse (c p, pays));                                            
                                                                                  (inter-attributs)

CREATE TABLE Adresse(
  c p INTEGER(5) NOT NULL,
  pays VARCHAR(50) NOT NULL,
  initiale CHAR(1) CHECK (initiale = LEFT(pays, 1)),
  PRIMARY KEY (c p, pays));

                                         2018-2019     ensiie                                    14
LDD : langage de définition des données   Création d’objets

Vues
Mécanisme assurant :
  • l’indépendance logique
       • description des données manipulées par une application 6= description
         logique des relations
  • la confidentialité
 vin(n vin, région, cru, année, n viticulteur)
 commande(n com, n client, n vin, dateCom, qtteCom)
 client(n client, nomCli, villeCli, adrCli, totCli)
⇒ vues clientVIP et vin bordeaux pour le service commercial
 clientVIP(numéro,nom, ville, adresse, cumulAnnée) (où cumulAnnée =
 totCli > 1000)

 vin bordeaux(n vin, cru, année, n viticulteur)
⇒ vue achats pour service marketing pour étudier le lien entre adresse
client et type de vin commandé
 achats(n client, ville, cru, région, n vin, qtté)
                                           2018-2019     ensiie                    15
LDD : langage de définition des données   Création d’objets

Vues
               client

                                              clientVIP
                                     ⇒

           commande

                                     2018-2019     ensiie               16
LDD : langage de définition des données   Création d’objets

Création de vues
Définition logique d’une relation sans stockage de données
  • ∼ table virtuelle
  • Requête stockée (définition)
    ouvrant une fenêtre dynamique sur les données (résultat)

CREATE VIEW  
AS ; -- nombre et types identiques que dessus

 CREATE VIEW Super age (super, age)
 AS SELECT (nom super, age) FROM Super heros;

  • Simplifie les requêtes utilisateurs
  • Interrogation : toujours possible
  • Mise à jour : possible si la vue comporte suffisamment d’information
    pour permettre une mise à jour non ambiguë

                                           2018-2019     ensiie               17
LDD : langage de définition des données   Création d’objets

Vues en SQL
 • sélection de contenu
 • changement de nom d’attributs
 • contenu calculé
 vin(n vin, région, cru, année, n viticulteur)
 commande(n com, n client, n vin, dateCom, qtteCom)
 client(n client, nomCli, villeCli, adrCli, totCli)

 CREATE VIEW clientVIP(numéro, nom, ville, adresse, cumulAnnée) AS
 SELECT n client, nomCli, villeCli, adrCli, totCli FROM client WHERE
 totCli >1000;
 CREATE VIEW achats(n client, ville, cru, qtté) AS SELECT n client,
 villeCli, cru, SUM(qtteCom) FROM vin NATURAL JOIN commande NATURAL
 JOIN client GROUP BY n client, villeCli, cru;

                                         2018-2019     ensiie               18
LDD : langage de définition des données   Modification d’objets

Modification de tables
Modification d’attributs ou de contraintes préalablement définis

                                                                                -- Ajout d’un attribut
ALTER TABLE 
ADD COLUMN ();

                                                                    -- Suppression d’un attribut
ALTER TABLE 
DROP COLUMN ();

                                            -- Modification d’un attribut
ALTER TABLE 
ALTER COLUMN ();

                                                -- Ajout d’une contrainte
ALTER TABLE 
ADD CONSTRAINT ();
                                                                                                  ...

                                          2018-2019     ensiie                                       19
LDD : langage de définition des données   Modification d’objets

Modification de tables                                            (Super exemple)
Modification d’attributs ou de contraintes préalablement définis

 CREATE TABLE Super heros(                                                      -- table initiale
   nom super VARCHAR(20) PRIMARY KEY,
   nom civil VARCHAR(20),
   prenom VARCHAR(20),
   age INTEGER(3));

                                                          -- modifications
 ALTER TABLE Super heros ALTER COLUMN nom super TYPE VARCHAR(50);
 ALTER TABLE Super heros ADD CONSTRAINT u n UNIQUE (nom civil, prenom);
 ALTER TABLE Super heros DROP COLUMN age;

 Super heros(                                                                   -- table modifiée
   nom super VARCHAR(50) PRIMARY KEY,
   nom civil VARCHAR(20),
   prenom VARCHAR(20),
   CONSTRAINT u n UNIQUE (nom civil, prenom));

                                          2018-2019     ensiie                                  20
LDD : langage de définition des données   Suppression d’objets

Suppression d’objets
Suppression d’une relation ou d’une vue

DROP TABLE ;
DROP VIEW ;
 DROP TABLE Parvenus;                                                          -- ! tables référencées
 DROP VIEW Parvenus;

                                          2018-2019     ensiie                                         21
Langage de contrôle des transactions

LDD : langage de définition des données

Langage de contrôle des transactions
   Maintien de la cohérence
   Transactions
   Vérification des CI

LCD : langage de contrôle des données

                                        2018-2019     ensiie   22
Langage de contrôle des transactions   Maintien de la cohérence

Perte possible de la cohérence
  • Mises à jour introduisant des données fausses, incohérentes par
    rapport à la description de la base ou par rapport aux données déjà
    stockées
     ⇒ contrôle de l’intégrité
  • Accès simultanés aux mêmes données par des utilisateurs différents
     ⇒ contrôle des accès simultanés / concurrence
  • Pannes (machine, système, erreur de manipulation)
     ⇒ procédures de reprise

                                        2018-2019     ensiie                      23
Langage de contrôle des transactions   Maintien de la cohérence

Cohérence
Cohérence statique
Base de données inactive dont toutes les données vérifient les contraintes
d’intégrité
Cohérence dynamique
Cohérence vis à vis des traitements : notion de transaction = unité de
traitement

                       début transaction
                t1                                        BD          BD cohérente

                                requêtes
                                 SQL

                t2                                       BD’         BD’ cohérente
                        fin transaction

             temps
                                         2018-2019     ensiie                         24
Langage de contrôle des transactions   Transactions

Déroulement d’une transaction
  • Début d’une transaction
       • explicite : BEGIN
       • implicite : première requête SQL après la fin de la transaction
         précédente
  • Contenu de la transation
       • une ou plusieurs requêtes de màj ou interrogation
  • Fin de la transaction
       • normale : validation COMMIT
       • anormale : annulation des màj ROLLBACK

                                               commit
          BD                                                          BD’
                                               rollback

                                         2018-2019     ensiie                 25
Langage de contrôle des transactions   Transactions

Atomicité d’une transaction
  • maintien de la cohérence nécessite souvent plusieurs màj,
    éventuellement dans plusieurs tables
       • ex : transfert entre deux comptes en banque
            I 2 requêtes : update compteA, update compteB

       • ex : achat billet train
            I 2 requêtes : insertion billet, màj places dispos

  • une transaction est toujours exécutée en totalité ou pas du tout :
      • COMMIT accepté ⇒ toutes les màj sont enregistrées définitivement
      • ROLLBACK ⇒ toutes les màj depuis le début de la transaction sont
         annulées

                                         2018-2019     ensiie                  26
Langage de contrôle des transactions   Transactions

Exemple de transaction
Suppression d’une commande comprenant des lignes de commande
 begin;
 delete from commande;
 delete from ligne commande; -- lignes correspondantes
 si (les deux delete OK) commit; si (commit KO) rollback
 sinon rollback

                                       2018-2019     ensiie         27
Langage de contrôle des transactions   Transactions

Propriétés ACID des transactions
  • Atomicité : transaction effectuée en totalité ou pas du tout
  • Cohérence : la BD passe d’un état cohérent à un autre état cohérent
  • Isolation : la transaction s’effectue comme si elle était seule
  • Durabilité : une fois une transactions validée, son effet ne peut pas
    être perdu suite à une panne quelconque

                                        2018-2019     ensiie                    28
Langage de contrôle des transactions   Transactions

Vérification des contraintes
Types de contraintes
  • Contraintes individuelles (1 n-uplet)
      • à vérifier sur insert, update
  • Contraintes sur plusieurs n-uplets d’une relation
      • insert, update
  • Contraintes entre relations
      • à vérifier en fin de transaction (sinon ordre imposé sur les màj)

                                         2018-2019     ensiie                   29
Langage de contrôle des transactions   Vérification des CI

Maintien de la cohérence dans les C.I. référentielles
REFERENCES  [()] [action]
[vérification] [moment-vérification]
Vérification
  • NOT DEFERRABLE (par défaut)
      • vérification immédiate (à la fin de la mise à jour)
  • DEFERRABLE
      • vérification différée : commit ou exécution de la commande

Moment de la vérification
  • INITIALLY IMMEDIATE (défaut)
      • vérification après chaque instruction par défaut
  • INITIALLY DEFERRED
      • vérification à la fin de la transaction

                                          2018-2019     ensiie                 30
Langage de contrôle des transactions   Vérification des CI

Vérification des CI référentielles
 alter table commande alter constraint fk buveur deferrable INITIALLY
 DEFERRED;

 begin;
 -- le buveur 399 n’existe pas encore mais lui ajoute quand meme une
 commande
 insert into commande values(124, 399, 170, ’2018-11-23’, 6);
 insert into buveur values(399, ’Durant’, ’Jacques’, ’Fril’);
 commit;
 → INSERT ok
sans la modification de la table, erreur car le buveur n’existe pas encore

                                        2018-2019     ensiie                 31
Langage de contrôle des transactions   Vérification des CI

Action de maintien de cohérence
Action
= ce que doit faire le SGBD en cas de màj de la clé référencée

                               ON DELETE                    RESTRICT

                               ON UPDATE                     CASCADE

                                                            SET NULL

                                                          SET DEFAULT
  • RESTRICT
      • identique à l’absence d’action (NO ACTION, défaut) sauf que
        vérification pas décalable
      • si non respect d’intégrité référentielle, erreur déclenchée et màj interdite
  • CASCADE
      • la màj est répercutée sur les tuples référençant
  • SET NULL/DEFAULT
      • clé étrangère → vide (NULL) ou valeur par défaut (DEFAULT)

                                          2018-2019     ensiie                            32
Langage de contrôle des transactions   Vérification des CI

Action de maintien de la cohérence

              :Buveur                                                  :Commande
           n buveur : 399                                            n commande : 5
           nom : Dupond                                               n buveur :399
                 ...                                                       ...

sur la contrainte d’intégrité référentielle de n buveur dans Commande :
  • ON DELETE CASCADE
  • ON DELETE SET NULL

                                        2018-2019     ensiie                          33
Langage de contrôle des transactions   Vérification des CI

Action de maintien de la cohérence

               :Buveur                                                  :Commande
            n buveur : 399
            nom : Dupond
                                                ⇒                     n commande : 5
                                                                       n buveur :399
                  ...                                                       ...

sur la contrainte d’intégrité référentielle de n buveur dans Commande :
  • ON DELETE CASCADE
  • ON DELETE SET NULL

                                        2018-2019     ensiie                           33
Langage de contrôle des transactions   Vérification des CI

Action de maintien de la cohérence

                :Buveur                                                    :Commande
             n buveur : 399
             nom : Dupond
                                                      ⇒                  n commande : 5
                                                                         n buveur :NULL
                   ...                                                         ...

sur la contrainte d’intégrité référentielle de n buveur dans Commande :
  • ON DELETE CASCADE
  • ON DELETE SET NULL

                                        2018-2019     ensiie                              33
Langage de contrôle des transactions   Vérification des CI

Déclencheur (TRIGGER)
Maintien procédural de la cohérence :
actions à déclencher automatiquement lors d’une mise à jour

Exemple : mise à jour des quantités vendues lors d’une insertion de
commande
 PRODUIT (n produit, libelle, qtté tot vendue)

 CREATE TRIGGER insert commande
   AFTER INSERT ON commande FOR EACH ROW
   UPDATE produit
     SET qtté tot vendue = qtté tot vendue + NEW.qttéCom
     WHERE n produit = NEW.n produit;

⇒ intégration de traitements dans la BD

                                        2018-2019     ensiie                 34
LCD : langage de contrôle des données

LDD : langage de définition des données

Langage de contrôle des transactions

LCD : langage de contrôle des données
  Droits

                                         2018-2019     ensiie   35
LCD : langage de contrôle des données   Droits

LCD : langage de contrôle des données
Création d’utilisateurs
Définition de leurs droits                                → SGBD, BD, relations ou attributs

Remarque

Gestion de la création d’utilisateur (CREATE USER) → par le SGBD en général

                                          2018-2019     ensiie                              36
LCD : langage de contrôle des données   Droits

Attribution des droits
GRANT  ON  TO 
[WITH GRANT OPTION];                              -- transfert de droits

 GRANT SELECT, UPDATE ON Super heros TO Edna Mode;
 GRANT ALL PRIVILEGES ON Super heros TO PUBLIC;                  -- tous
 utilisateurs/r^
               oles

Liste des droits

  • SELECT
  • INSERT
  • DELETE
  • UPDATE
  • ALL PRIVILEGES
  • ...

                                         2018-2019     ensiie          37
LCD : langage de contrôle des données   Droits

Attribution des droits                                             (Remarques)

  • Droits sur un SGBD
                                             (création et suppression de BD et des tables)

  • Droits sur une BD
                                                               (création et suppression de tables)

  • Droits sur une vue
    Syntaxe quasi-identique                                            (VIEW à la place de TABLE)

                                        2018-2019     ensiie                                          38
LCD : langage de contrôle des données   Droits

Révocation de droits
REVOKE [GRANT OPTION FOR] 
ON  TO 

 REVOKE UPDATE ON Super heros TO Edna Mode;
 REVOKE ALL PRIVILEGES ON Super heros TO PUBLIC;

Droit supprimé pour un utilisateur U
    → droit supprimé en cascade pour les utilisateurs ayant obtenu le droit par U

                                         2018-2019     ensiie                    39
Vous pouvez aussi lire