Académique Documents
Professionnel Documents
Culture Documents
Bases de Données
Semestre: S5
Références :
1. George. Gardarin : Bases de Données Eyrolles , Edi. 3, 2003
2. Ramez Elmasri, Shamkant B. Navathe, Fundamentals of Databases Systems, Pearson, 7 Ed., 2016
3. Hector Garcia-Molina, Jeffrey D. Ullman, Jennifer Widom Databases Systems: The Complete Book Ed. 2 Prentice 2008
I. Gestion et manipulation des index
Un index dense
s'il contient une clé par enregistrement et non dense sinon.
Si une table possède un index non-dense, alors le fichier de cette table est
toujours trié selon la clé d'index (sinon l'index ne sert à rien).
Autres propriétés
Un index pour lequel la clé d'index contient la clé primaire de la relation est
appelé un index primaire. Les autres indexes sont appelés indexes secondaires.
Deux entrées d'index possédant la même clé sont des doublons. Un index
primaire ne contient pas de doublon.
Différents Types d‟index
Outre le fichier tas un index peut avoir les représentations internes suivantes:
Hash-index : l'index est organisé comme une table de hashage
Tree-index : l'index est organisé comme un arbre de recherche
Fichier trié : le fichier est trié selon une clé particulière (i.e. l'ordre des
enregistrements sur le disque coïncide avec l'ordre de la clé d'index)
Principe du hachage
Calcul la position d‟un enregistrement d‟après la clé
– une fonction de hachage h associe des valeurs de clés à des adresses de bloc
– recherche d‟un enregistrement implique le calcul de l‟endroit où il se trouve
10
Exemple
Bloc (page) = 4 enregistrements 60 Erable argenté 15.99
20 Sapin 12.99
50 Chêne 22.99
2
95 Génévrier 15.99
80 Poirier 26.99
11
Arbre B
• Un arbre équilibré
• Il se réorganise dynamiquement
12
Structure d'un nœud d'un arbre-B
P0 x1 a1 P1 x2 a2 P2 …… xi ai Pi …… xk ak Pk
Sous-arbre
pointé par P1 <P1, <Pr1>, P2, <Pr2>, …, <Prq-1>, Pq>
• q p
• Chaque Pi est un pointeur vers un sous-arbre
• Pri est un pointeur sur les données
• Chaque nœud a au plus p pointeurs d’arbre
14
Exemple
6 9
<6
>9
>6 <9
1 3 7 13
15
Requêtes
• Scénario pour les requêtes singulières
– Prédicat de sélection: SSN=8
6 9
<6
>9
>6 <9
1 3 7 13
16
Requêtes
• Scénario pour les requêtes singulières
– Prédicat de sélection: SSN=8
6 9
<6
>9
>6 <9
1 3 7 13
17
Requêtes
• Scénario pour les requêtes singulières
– Prédicat de sélection: SSN=8
6 9
<6
>9
>6 <9
1 3 7 13
18
Requêtes
• Scénario pour les requêtes singulières
– Prédicat de sélection: SSN=8
6 9
<6
>9
>6 <9
1 3 7 13
19
Requêtes
• Algorithme d’accès
6 9
<6
>9 H étapes = accès
>6 <9 disque
1 3 7 13
20
Requêtes d’intervalle
• Exemple: 5<salaire<8
• Proximity/ nearest neighbor searches? (eg., salaire ~ 8 )
6 9
<6
>9
>6 <9
1 3 7 13
21
Fichier trié
On illustre sur une relation ayant le schéma Emp(Nom, Age, Salaire)
Ahmed
Mourad
Mourad, 19, 20000
Kadour
Kadour, 27, 23000
Mouhand
Akka, 33, 33000
Akka
…
Mouhand, 30000
Ahmed, 37000
23
Requêtes conjonctives ~ Index
• Attention:
– Cette solution pourrait être inefficace si les facteurs de sélectivité des
prédicats sont inférieurs à 0.6
• Dans un tel cas, le SGBD pourrait préférer faire un balayage séquentiel de la
table
24
Index bitmap
• Problème:
– Comment indexer une table sur un attribut qui ne prend qu‟un
petit nombre de valeurs?
25
Principe de l’index bitmap
• Soit un attribut A, prenant n valeurs possibles [v1, …,vn] (domaine)
26
Exemple
ROWID(RID) Soudeur Fraiseur Sableur Tourneur
28
Autre exemple
SQL: CREATE INDEX BITMAP ON Ouvrier(Salaire) TABLESPACE Sal_espace
ROWID(RID) 20000 30000 40000
00055 :000 :0023 1 0 0
29
Exemple avec count()
• Requêtes type OLAP (data warehouse)
SELECT COUNT(*) FROM Ouvrier WHERE Spec in (‘Soudeur’, ‘Tourneur’)
30
Exemples de création d’index
• Le nom d‟un index est choisi par le DBA et peut être normalisé en le préfixant
par idx_ suivi du nom de l‟attribut indexé et terminé par le nom de la table
• Exemple:
CREATE UNIQUE INDEX idx_NSS_Ouvrier ON Ouvrier(NSS);
CREATE UNIQUE INDEX idx_NSS_Salaire_Ouvrier ON Ouvrier(NSS, Salaire);
CREATE INDEX BITMAP ON Ouvrier(Specialite) TABLESPACE spec_espace
• Suppression d‟un index
DROP INDEX <Nom de l ‟index>;
DROP INDEX idx_NSS_Ouvrier;
31
Guide d’utilisation des index en cours
d’exploitation d’une BD
Les index utiles sont ceux nécessaires à l‟exploitation courante des
données
Supprimer les index lorsqu‟il s‟agit de traiter un flux important de
transactions de type mise à jour sur une table. Ils sont d‟abord
supprimés, puis recréés au besoin après les mises à jour
Une accélération de la jointure est possible par la création des index:
indexer les attributs de jointure permettra un accès plus rapide
32
Guide d’utilisation des index en cours
d’exploitation d’une BD (suite)
Tous les attributs d‟un index composé doivent être présents dans la
clause WHERE, peu importe leur ordre dans la clause, pour que
l‟optimiseur en tire profit
Si le premier attribut de l‟index composé est présent dans le WHERE,
l‟index composé est utilisé. Sinon, il devient inutile
La négation dans une condition bloque l‟usage des index composés:
les valeurs hors domaine ne sont pas indexées
Quand faut-créer un index composé?
- Lorsque certains attributs sont fréquemment utilisés ensemble, il
peut être avantageux de définir quelques index composés
33
Surveillance de l’utilisation des index
• Oracle (à partir du 9i) permet de surveiller les index afin de
déterminer s‟ils sont utilisés ou non.
• SQL :
ALTER INDEX nom_index MONITORING USAGE |
NOMONITORING USAGE
– permet d‟activer ou de désactiver la surveillance
34
Mise en pratique
SELECT *
FROM V$OBJECT_USAGE % une vue permettant la surveillance des index (6 attributs)
WHERE index_name = ‘idx_NSS_Ouvrier ’;
SYNTAXE
ANALYSEUR SEMANTIQUE
SCHEMA
VUES
CONTROLE INTEGRITE
AUTORISATIONS
ORDONNANCEMENT
META-BASE OPTIMISEUR ELABORATION
D'UN PLAN
EXECUTABLE EXECUTION
METHODES D'ACCES
Traitement d’une requête SQL
Analyse de la
requête Analyse sémantique
à l’aide de dictionnaire
Analyse syntaxique
de données
Optimisation de l’arbre
algébrique
Exécution du plan
choisi
38
2. Évaluation des requêtes (1)
2. Ordonnancement
Décomposer la requête en séquences d'opérations élémentaires
(Algèbre relationnelle).
Déterminer un ordre +- optimal.
Génération d'un plan d'exécution
3. Exécution
Exécution en parallèle ou en séquences des opérations élémentaires selon
le plan d'exécution défini en 2
Considérons :
SELECT *
FROM Pilote, Certification
WHERE Pilote.IdP = Certification.IdP;
Opération fondamentale utilisée par toutes les applications BD.
L'Algèbre Relationnelle nous dit que R ⨝ S = σ=(R x S), mais c'est très inefficace,
on veut optimiser ce cas!
On suppose dans la suite M pages dans R, PR enregistrements/page, N pages
dans S, PS enregistrements/page.
On pose pour les exemples: M=1000, N=500, PR=120, PS=100
Coût: M + PR * M * N
On exploite l'existence d'un index sur l'une des relation pour en faire la relation
interne.
Coût: M + PR * M * (coût d'accès index + coût index ↦ données)
Plusieurs variantes: B+-tree/Hash-index, groupant/non-groupant,…
Ordonnancement par restructurations algébriques
règles de transformation
+ heuristiques
A1 <=> Aopt
Règles de transformation
Heurist iques d'Optimisat ion [ULLMAN]
Définition : Dénormalisation
Problématique de la dénormalisation :
• Regroupement de tables
• Création de redondances d'attribut non clé
• Ajout de clé étrangère redondante
• Création de transitivité
•Création de tables de jointure
La dénormalisation :
• ensemble de règles d'optimisation structurelles du modèle logique relationnel
• ces règles garantissent le respect des spécifications initiales :
• tout autre type de modification, sous couvert d'optimisation, peut entraîner une
altération de la sémantique du modèle conceptuel de données
• pour chacune de ces règles il faut estimer les gains espérés et les pertes générées,
ainsi que les conséquences secondaires
1. Ecrire, sans utiliser l‟operateur logique AND, une requête SQL pour savoir
les noms des étudiants qui ont soutenu l‟exam de Base de Données.
2. Optimiser la requête SQL (cette fois en utilisant l‟operateur logique AND).
3. Donner l‟arbre algébrique de la requête.
1. Pour écrire la requête sans utiliser AND il faut utiliser l‟operateur IN et
écrire :
III. Gestion et manipulation des transaction
III.1 But
Principe :
Le SGBD garantit les propriétés ACID lorsqu'il exécute une primitive;
Si le programmeur désire que cette propriété s'applique à une séquence
d'instructions, il doit en faire une transaction :
begin-transaction
acquisition des données
modification des données
si erreur ROLLBACK et sortie
COMMIT
suite du traitement
III.2 Notion de Transaction (4)
Exemple : panne
Action du SGBD : effacer toute trace de la transaction annulée après la reprise
(reprise après panne)
III. 3 Propriétés d'une transaction :
Problème :
Des contraintes ne sont satisfaites que suite à une séquence de plusieurs primitives !
Ceci génère des états intermédiaires incohérents
Example :
Après la suppression d'une commande (contrainte: toute ligne de commande doit
être associée à une commande), la BD peut être incohérente.
Propriété qui assure que lorsqu'une transaction a été confirmée (COMMIT), ses
effets deviennent permanents.
Problème possibles :
lorsque certaines transactions font des mises jour sur la Base de Données :
• Perte de mise à jour
• Lecture impropre
• Lecture non reproductible
III. 4 Transactions concurrentes (1)
T1 et T2 transactions concurrentes:
• T1 : lire (x) ; x := x + 15 ; écrire (x)
• T2 : lire (x) ; x := x + 11; écrire (x)
• Au départ x = 18
T1 T2
lire (x); (dans BD x=18);
x := x + 15;
lire (x); ( dans x= 18)
écrire (x) (Dans BD x=33)
x := x + 11;
écrire (x); (dans BD x=44)
Remarque : la mise à jour effectuée par T1 a été écrasée par celle faite par T2
III. 4 Transactions concurrentes (2)
• Lecture impropre
T1 T2
UPDATE comptes
SET solde = 11 000
WHERE num_compte = ʻ11ʼ ;
SELECT solde
FROM comptes
WHERE num_compte = ʻ11ʼ ;
ROLLBACK
Remarque :
T1 T2
UPDATE Comptes
SET solde = solde - 1000
WHERE num_compte = ʻ11ʼ ;
SELECT SUM (solde)
FROM Comptes
WHERE num_compte in (ʻ11ʼ,
ʻ22ʼ) ;
UPDATE Comptes
SET solde = solde +1000
WHERE num_compte = ʻ22ʼ
COMMIT
Remarque
• la somme des comptes affichée par T2 est incorrecte puisque le solde du compte „22'
n'a pas encore été mis à jour
• Etat intermédiaire incohérent de la base de données
• Lecture non reproductible
• T1 et T2 transactions concurrentes
• T1 effectue plusieurs fois la lecture du même objet
T1 T2
SELECT points FROM Resultats
WHERE num_cours = 22 AND
num_eleve = 33 ;
UPDATE Resultats
SET points = points * 1.1
WHERE num_cours = 22
AND nom_eleve = 33 ;
SELECT points FROM Resultats
WHERE num_cours = 22 AND
num_eleve = 33 ;
COMMIT
Remarque :
•En principe, T1 doit obtenir à chaque lecture la même valeur
• Mais, si entre 2 lectures de l'objet, celui-ci est modifié par T2, T1 n'obtient plus le
même valeur : lecture non reproductible !
III. 4 Verrouillage
Pour assurer la sécurité des bases de données , les données doivent être
protégées contre :
Ainsi, une vue cache les données que l'utilisateur n'a pas besoin de voir.
Spécifier les autorisations, c‟est à dire les règles qui permettent de définir qui a le
droit d‟effectuer un tel type d‟opération sur telles données.
Au niveau des vues, un utilisateur peut être autorisé ou non à accéder aux
données qui font partie d'une vue donnée.
Causes de violation de la sécurité
Pour protéger une BD, des mesures de sécurité doivent être prises sur plusieurs
niveaux:
Physique: Les sites qui hébergent les données et les SGBDs doivent être
physiquement armés contre les intrusions en force.
Humain: Les autorisations doivent être accordées d‟une façon sélective afin
qu‟un utilisateur ne cède ses autorisations à une personne malveillante.
Système: Quelle que soit la sûreté de la BD, des faiblesses éventuelles dans la
sécurité de systèmes de gestion de base de données peuvent être mises à
profit pour pénétrer la base. Donc, la sécurité du logiciel système est aussi
importante que la sécurité physique de la base.
Base de donné : Le système doit s‟assurer que les restrictions des accès ne
sont pas violées.
Les systèmes de gestion de bases de données assurent leur sécurité en deux
niveaux:
Niveau des relations: Un utilisateur peut être autorisé ou non à une relation
donnée.
Niveau des vues: Un utilisateur peut être autorisé ou non à accéder aux
données qui font partie d‟une vue donnée.
Une vue cache les données qu‟un utilisateur n‟a pas besoin de les voir, donc,
elle facilite l‟accès à la base et renforce sa sécurité.
Les raisons d‟utiliser la vue comme une approche de protection sont les
suivantes :
Elle est mieux adaptée pour restreindre l‟accès à la base de donnée.
Sa définition est statique mais les données aux quelles on accède à travers
la vue sont dynamiques.
Elle est adaptée pour implémenter les niveaux dans une multibase de
données.
Autorisations pour les vues et les relations
Les contraintes d‟intégrité sont des règles par rapport à elles se fait le contrôle de
validité sur les opérations effectuées.
Ils existent plusieurs types de contraintes d‟intégrité (temporelles, référentielles ,etc.).
Les contraintes d‟intégrité protègent la base contre une perte de consistance lors des
modifications effectuées par les utilisateurs autorisés.
Privilèges d'accès
Pour gérer les droits d'accès à la BD, on peut à l'aide de SQL accorder des
privilèges par l'instruction GRANT.
Exemples:
Restriction d‟accès
sur les tuples
Cryptage des données
Les précautions très diverses que l'on peut prendre pour protéger une BD
peuvent ne pas être suffisantes pour des données très importantes.
Dans de tel cas, celles-ci doivent être cryptées. Il n'est pas possible de lire de telles
données à moins de connaître le code qui permet le décryptage.
Exemple:
(1) Balayage séquentiel On évalue séquentiellement la condition sur tous les tuples
de la relation, ceux-ci étant chargés page par page. Le nombre d‟E/S est donc le
nombre de pages nécessaires pour stocker la relation hotel soit 1000 : NE/S = 1000.