Cours 8
Transcription
Cours 8
Cours 8 : Séquences, vues et index Les séquences Générer des valeurs (numériques) • Par exemple de clés primaires Coordonner les valeurs de clés dans plusieurs lignes ou tables 2014-2015 Bases de données 2 Création : syntaxe CREATE SEQUENCE nom-séquence [INCREMENT BY ( 1 | valeur )] [START WITH valeur ] [ MAXVALUE valeur | NOMAXVALUE ] [ MINVALUE valeur | NOMINVALUE ] [ CYCLE | NOCYCLE ] [ CACHE ( valeur | 20 ) | NOCACHE ] Prégénération des valeurs (nombre des valeurs stockées en mémoire) Suppression : syntaxe DROP SEQUENCE nom-séquence 2014-2015 Bases de données 4 Exemple CREATE SEQUENCE masequence START WITH 1000 INCREMENT BY 30 NOMAXVALUE NOCYCLE 2014-2015 Bases de données 5 Exemple (suite) INSERT INTO voyage (numVoyage, nomVoyage) VALUES(masequence.NEXTVAL, 'Voyage en Italie') INSERT INTO tarif VALUES (masequence.CURRVAL, SYSDATE+30, 1700) 2014-2015 Bases de données 6 Les vues Les vues en deux mots : des tables virtuelles Les vues en une phrase : une vue est une table qui est le résultat d’une requête (SELECT) à laquelle on a donné un nom Le nom d’une vue peut être utilisé partout où on peut mettre le nom d’une table : SELECT, UPDATE, DELETE, INSERT, GRANT 2014-2015 Bases de données 7 Création d’une vue : syntaxe CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW nom-de-vue [(attr1, …, attrn)] AS requête [WITH CHECK OPTION [CONSTRAINT nom-contrainte]] [WITH READ ONLY] 2014-2015 Bases de données 8 Utilisation d’une vue : comme si elle était une table SELECT ... FROM nom-de-vue WHERE ... 2014-2015 Bases de données 9 Suppression d’une vue DROP VIEW nom-de-vue La suppression d’une vue n’entraîne pas la suppression des données Les vues figurent dans les tables systèmes ALL_CATALOG, USER_VIEWS et ALL_VIEWS 2014-2015 Bases de données 10 Renommer une vue RENAME ancien-nom TO nouveau-nom 2014-2015 Bases de données 11 Exemple Exemplaire numExemplaire numFilm codeSupport vo probleme detailSupport Film numFilm titre realisateur nomClient prenomClient motDePasse adresse Location login Individu numIndividu 2014-2015 Client login numExemplaire nomIndividu dateLocation prenomIndividu dateEnvoi Bases de données dateRetour 12 Exemple (2) CREATE OR REPLACE VIEW exemplairePlus (num, vo, titre, real, support) AS SELECT numExemplaire, vo, titre, nomIndividu, codesupport FROM Exemplaire E, Film F, Individu WHERE E.numFilm = F.numFilm AND realisateur = numIndividu AND probleme IS NULL; 2014-2015 Bases de données 13 Exemple (3) SELECT num, titre, dateLocation, login FROM exemplairePlus, Location WHERE num = numExemplaire AND real = 'SAUTET' AND dateRetour IS NULL; 2014-2015 Bases de données 14 Exemple (4) INSERT INTO exemplairePlus (num, support) VALUES (150346, 'DVD'); DROP VIEW exemplairePlus; 2014-2015 Bases de données 15 Quatre raisons d’utiliser des vues 1) Effet macro : remplacer une requête compliquée par des requêtes plus simples 2) Confidentialité 3) Contraintes d’intégrité 4) Augmenter l’indépendance logique 2014-2015 Bases de données 16 1) Effet macro Remplacer une requête compliquée par des requêtes plus simples 2014-2015 Bases de données 17 2) Confidentialité : exemple CREATE VIEW emprunteurRestreint AS SELECT login, nomClient, prenomClient FROM Client 2014-2015 Bases de données 18 3) Contraintes d’intégrité (CHECK OPTION) : exemple CREATE VIEW anciensExemplaires AS SELECT * FROM Exemplaire WHERE numExemplaire < 2000 WITH CHECK OPTION; UPDATE anciensExemplaires SET numExemplaire = 3812 WHERE numExemplaire = 1318; Sans 'WITH CHECK OPTION', c’est possible. Avec 'WITH CHECK OPTION', c’est impossible. 2014-2015 Bases de données 19 4) Augmenter l’indépendance logique Les applications utilisant les tables de la base ne doivent pas être modifiées si on change le schéma de la base 2014-2015 Bases de données 20 Conditions de mise à jour pour les vues Pour UPDATE, DELETE, INSERT la vue ne doit pas contenir : • • • • • 2014-2015 Un opérateur ensembliste (UNION, MINUS, INTERSECT) Un opérateur DISTINCT Une fonction d’agrégation comme attribut Une clause GROUP BY Une jointure (la vue doit être construite sur une seule table) Bases de données 21 Conditions de mise à jour pour les vues (2) Pour UPDATE, DELETE, INSERT : • • 2014-2015 Les colonnes résultats de l’ordre SELECT doivent être des colonnes réelles d’une table de la base et non des expressions Si la vue est construite à partir d’une autre vue, cette dernière doit elle-même vérifier les conditions ci-dessus Bases de données 22 Cas particulier d’Oracle Une table T préserve la clé dans une vue V si la clé primaire de la table T désigne une seule ligne de la vue (elle pourrait être une clé de la vue si celle-ci était une vraie table) On peut faire une mise à jour si les colonnes référencées dans la mise à jour appartiennent toutes à la même table et si cette table préserve la clé dans la vue 2014-2015 Bases de données 23 Cas particulier d’Oracle : exemple CREATE VIEW locationBis AS SELECT E.numExemplaire, nomClient, prenomClient, dateEnvoi, dateRetour, numFilm FROM Exemplaire E, Location L, Client C WHERE E.numExemplaire = L.numExemplaire AND L.login = C.login; La table location préserve la clé dans la vue locationBis Les tables client et exemplaire ne préservent pas la clé dans la vue locationBis 2014-2015 Bases de données 24 Cas particulier d’Oracle : exemple (2) UPDATE locationBis SET dateRetour = SYSDATE WHERE nomClient = 'Martin' AND numFilm = 1; Mise à jour possible 2014-2015 Bases de données 25 Cas particulier d’Oracle : exemple (3) UPDATE locationBis SET numFilm = 4 WHERE nomClient = 'Duval'; Mise à jour impossible 2014-2015 Bases de données 26 Cas particulier d’Oracle : exemple (4) INSERT INTO locationBis ( numExemplaire, dateEnvoi, nomClient, prenomClient) VALUES(4578, SYSDATE, 'FIORENZI', 'FRANCESCA'); Insertion impossible 2014-2015 Bases de données 27 Rappels La définition de la vue est enregistrée dans la base de données, mais les lignes correspondant à la vue ne le sont pas A deux instants distincts, le « contenu » d’une vue peut changer (si le contenu des tables qui entrent dans la description de la vue a évolué). En effet, le contenu d’une vue est recalculé à chaque utilisation de la vue par SQL 2014-2015 Bases de données 28 Les index Un index est un objet associé à une table pour accélérer les requêtes sur cette table Un index, sous Oracle, peut avoir deux type d’organisation : • Un arbre équilibré (B-tree) • Une bitmap 2014-2015 Bases de données 29 Organisation en arbre : exemple numFilm 22 15 58 44 29 53 8 2014-2015 titre ... ... ... ... ... ... ... Bases de données realisateur ... ... ... ... ... ... ... 30 Exemple (2) ROWID 0 1 2 3 4 5 6 ... 22 15 58 44 29 53 8 … 0 (racine) 29,4 1 15,1 2 8,6 2014-2015 position dans l’arbre clé pointeur dans la table (ROWID) 4 53,5 3 22,0 5 44,3 Arbre binaire de recherche 6 58,2 31 Exemple (3) 0 (racine) 29,4 1 15,1 2 8,6 4 53,5 3 22,0 pointeur pointeur fils gauche fils droit 5 44,3 6 58,2 pointeur dans la table (ROWID) clé 1,4,29,4 2,3,15,1 -1, -1, 8, 6 -1, -1, 22, 0 5, 6, 53, 5 -1, -1, 44, 3 -1, -1, 58, 2 ... 0 2014-2015 1 2 3 4 Bases de données 5 6 … 32 Les index (suite) Plusieurs index peuvent être associés à une même table Un index peut être créé à tout moment sur une table. Il est ensuite mise à jour automatiquement à chaque modification de la table Un index peut être créé sur un ou plusieurs attributs d’une table (maximum 16). Si l’index porte sur plusieurs attributs, on parle alors d’index composé 33 B-arbre Toutes les branches ont la même longueur Les nœuds internes ont des arités bornées, par exemple, un nœud contiendra n clés avec 63 < n < 128 et la racine contiendra m clés avec 0 < m < 128 On considère que la racine est à profondeur 1, ses fils à profondeur 2, etc 2014-2015 Bases de données 34 B-arbre (suite) Si l’arbre est complet (tous les nœuds ont 127 clés) et s’il a pour profondeur p, alors il contiendra 128 p – 1 clés Par exemple • • • • 2014-2015 p = 1 → 127 clés p = 2 → 16383 clés p = 3 → 2097151 clés p = 4 → 268 millions de clés Bases de données 35 B-arbre (suite et fin) Un nœud autre que la racine (arité n+1) clé1 clé2 clé1≤clé<clé2 clé<clé1 2014-2015 clé3 … clén clé3≤clé<clé4 clé2≤clé<clé3 Bases de données clén≤clé clén-1≤clé<clén 36 Bitmap Un index stocké sous forme de bitmap comporte une chaîne de bits (0 ou 1) pour chaque valeur de la colonne indexée La valeur bitmap est stockée en mode compressé, ce qui rend la place occupée par l’index inférieure à celle requise par un index de type B-arbre 2014-2015 Bases de données 37 Bitmap : exemple numEleve 54 18 classe 1 2 26 30 15 12 61 1 3 3 2 2 44 1 Index sur l’attribut classe 2014-2015 numEleve classe=1 classe=2 classe=3 54 1 0 0 18 0 1 0 26 1 0 0 30 0 0 1 15 0 0 1 12 0 1 0 61 0 1 0 44 1 0 0 BITMAP DE LA CLASSE 1 BITMAP DE LA CLASSE 2 BITMAP DE LA CLASSE 3 Bases de données 38 Création d’index Un index est créé • Soit automatiquement par le noyau (indexation implicite) • Soit à la demande du développeur (indexation explicite) 2014-2015 Bases de données 39 Indexation implicite L’indexation implicite est mise en œuvre lorsqu’une clé primaire ou une contrainte d’unicité est définie sur une table 2014-2015 Bases de données 40 Indexation explicite On interdit que deux lignes aient la même valeur pour l’index CREATE [UNIQUE | BITMAP] INDEX nom-index ON nom-table (nom-attribut [ASC | Pourcentage de place à DESC], ... ) laisser libre dans [PCTFREE nombre] chaque bloc de l’index [TABLESPACE nom-tablespace] [NOSORT] On évite la phase de tri des lignes (si les lignes sont physiquement rangés par valeur) 2014-2015 Bases de données 41 Suppression et recréation Suppression d’un index DROP INDEX nom-index Recréer un index ALTER INDEX nom-index REBUILD [PCTFREE nombre] [TABLESPACE nom-tablespace] 2014-2015 Bases de données 42 Les index (suite et fin) Dans le cas où il existe plusieurs index pour une table, l’optimiseur de requête sait choisir le meilleur index en fonction de la requête à exécuter L’adjonction d’un index à une table ralentit les mises à jour, mais accélère beaucoup la recherche des lignes L’adjonction d’un index à une table augmente la place prise par la base de données sur le disque Les valeurs NULL ne sont pas stockées dans l’index de façon à minimiser son volume 2014-2015 Bases de données 43 Il est conseillé de créer un index : Sur les attributs utilisés comme critère de jointure Sur les attributs servant souvent de critère de sélection Sur une table de gros volume dont la majorité des interrogations sélectionne moins de 15% des lignes Bitmap lorsque l’attribut comporte peu de valeurs distinctes B-tree lorsque l’attribut comporte une majorité de valeurs distinctes 2014-2015 Bases de données 44 Il est conseillé de ne pas créer d’index : Sur les attributs souvent modifiés Sur les attributs qui sont toujours sollicités dans une clause WHERE par l’intermédiaire d’une expression Lorsqu’une table comporte peu de lignes 2014-2015 Bases de données 45 Tables organisées en index Ce sont des tables qui possèdent un index sur leur clé primaire Cet index contient les clés primaires mais aussi les lignes de la table qui correspondent à ces clés. Donc l’index contient la table elle-même On économise ainsi de la place (et du temps en rendant inutile le ROWID) L’index doit être un B-tree 2014-2015 Bases de données 46 Syntaxe CREATE TABLE nom-table ( . . . ) ORGANIZATION INDEX TABLESPACE nom-tablespace; 2014-2015 Bases de données 47 Dictionnaire de données USER_INDEXES USER_IND_COLUMNS ALL_INDEXES ALL_IND_COLUMNS DBA_INDEXES 2014-2015 Bases de données 48 TABLESPACES Une base peut être décomposée en tablespaces : partitions logiques contenant un ou plusieurs fichiers Un fichier appartient à 1 et 1 seul tablespace Un tablespace peut s’étendre soit par ajout (on-line) d’un fichier, soit par auto-extension du fichier du tablespace Par défaut il existe toujours un tablespace baptisé SYSTEM qui contient le dictionnaire de données et le rollback segment 2014-2015 Bases de données 49