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