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 [(attr 1,, attr n )] 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
Film numfilm titre realisateur Exemple Exemplaire numexemplaire numfilm codesupport vo probleme detailsupport Client login nomclient prenomclient motdepasse adresse Individu numindividu nomindividu prenomindividu Location login numexemplaire datelocation dateenvoi dateretour 2014-2015 Bases de données 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 : 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) 2014-2015 Bases de données 21
Conditions de mise à jour pour les vues (2) Pour UPDATE, DELETE, INSERT : 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 2014-2015 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 titre realisateur 22...... 15...... 58...... 44...... 29...... 53...... 8...... 2014-2015 Bases de données 30
ROWID Exemple (2) 0 1 2 3 4 5 6... 22 15 58 44 29 53 8 1 15,1 0 (racine) 29,4 position dans l arbre clé pointeur dans la table (ROWID) 4 53,5 2 8,6 3 22,0 5 44,3 6 58,2 Arbre binaire de recherche 2014-2015 31
Exemple (3) 0 (racine) 29,4 1 15,1 4 53,5 2 8,6 3 22,0 5 44,3 6 58,2 pointeur fils gauche pointeur fils droit clé pointeur dans la table (ROWID) 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 1 2 3 4 5 6 2014-2015 Bases de données 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 p = 1 127 clés p = 2 16383 clés p = 3 2097151 clés p = 4 268 millions de clés 2014-2015 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é 3 clé n clé 1 clé<clé 2 clé 3 clé<clé 4 clé n clé clé<clé 1 clé 2 clé<clé 3 clé n-1 clé<clé n 2014-2015 Bases de données 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 classe 54 1 18 2 26 1 30 3 15 3 12 2 61 2 44 1 Index sur l attribut classe 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 2014-2015 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 DESC],... ) [PCTFREE nombre] Pourcentage de place à laisser libre dans 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