Vous êtes sur la page 1sur 349

Bases de Données Avancées

A. BENMAKHLOUF
Site Web: https://coursbenmakhlouf.me.ma/

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 1
Base de données Avancée
 Chapitre-1 : Rappel Sur les Bases de données
relationnelles et Langage SQL
 Chapitre-2: Optimisation des Requêtes
 Chapitre-3
: Langage Procédurale PL/SQL
Sous Oracle
 Chapitre-4
: Bases de données Réparties
Sous Oracle
 Chapitre-5: Les BDD décisionnelles &
Entrepôts de données
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 2
Objectifs
 Avoir la possibilité de manipuler les données dans
une BDD relationnelle avec SQL.
 Interroger les BDDR avec des requêtes complexes
en utilisant le PL/SQL.
 Augmenter les performances des BDDR en
réduisant le temps de réponses des requêtes
complexes.
 Manipuler et interroger des données provenant de
plusieurs serveurs. (BDDs réparties)
 Modélisation, création et manipulation des données
dans les Datawarehouse (BDD Décisionnelles)
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 3
Evaluation
 Mini Projet ou un examen TP (30%)
 Examen Final (70%)

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 4
Chapitre-1
les Bases de données
relationnelles et
Langage SQL

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 5
Introduction

Une Base De Données (BDD) est un ensemble structuré de données


enregistrées sur des supports informatique pour satisfaire
simultanément plusieurs utilisateurs de façon sélective. Cette BDD est
gérée par un SGBD
Un Système de Gestion de Bases de données (SGBD) est un
outil (logiciel) permettant de gérer et de manipuler des BDD.

Objectifs des SGBD :


 Exploitation de gros volumes de données avec une
structuration des données et méthodes d’accès efficaces,
 Exploitation par différents types d’utilisateurs avec des
différents outils d’accès ou interfaces-utilisateurs.
 Gestion de données sensibles avec sécurité et fiabilité
maximal. https://
coursbenmakhlouf.me.
A.Benmakhlouf 6 ma/
Introduction
Mauvaise représentation des données et Problématique

Nous voulons
Nom Client stocker Ville
Adresse des données concernant
N°Commande les ventes (commandes
Date-commande Désignation des clients)
Quantité Prix

Nom1
LesAdresse1 Rabat
clients passent C1
des 18/10/2012
commandes Article1
pour acheter 2
des produits 233,00
Nom1 Adresse1 Rabat C1 18/10/2012 Article2 5 24,00
Nom1 Adresse1 Rabat C1 18/10/2013 Article3 6 300,00
Nom1 Adresse1 Rabat C2 19/10/2014 Article1 5 233,00
Nom1 Adresse1 Rabat C2 19/10/2014 Article2 5 24,00
Nom2 Adresse3 Fès C3 20/10/2014 Article1 5 233,00
Nom2 Adresse3 Fès C3 20/10/2014 Article2 8 24,00
Nom2 Adresse3 Fès C4 21/10/2014 Article1 2 233,00
Nom2 Adresse3 Fès C4 21/10/2014 Article3 5 300,00

Anomalies lors d'une insertion


Anomalies lors d'une modification
Anomalies lors d'une destruction
A.Benmakhlouf 7 https://coursbenmakhlouf.me.ma/
Introduction
Bonne représentation des données

Une bonne présentation est celle qui :


Etre capable de représenter individuellement les clients les
commandes et les produits, de manière à ce qu'une action
sur l'un n'entraîne pas systématiquement une action sur
l'autre.
Définir une méthode d'identification d'un client d'une
commande et d’un produit, qui permette d'assurer que la
même information est représentée une seule fois .

Préserver le lien entre les clients, les commandes et les


produits, mais sans introduire de redondance.

https://
coursbenmakhlouf.me.
A.Benmakhlouf 8 ma/
Introduction
Bonne représentation des données

Id-client Nom Client Adresse Ville N° article Désignation Prix

CL1 Nom1 Adresse1 Rabat A1 Article1 233


A2 Article2 24
CL2 Nom2 Adresse3 Fès A3 Article3 300

N°Commande N° article Quantité

N°Commande Date-commande Id-client C1 A1 2


C1 A2 5
C1 18/10/2011 CL1
C1 A3 6
C2 19/10/2011 CL1 C2 A1 5
C3 20/10/2011 CL2 C2 A2 5
C4 21/10/2011 CL2 C3 A1 5
C3 A2 8
C4 A1 2
C4 A3 5
1- Quelles sont les commandes de chaque client ?
Reconstitution
2- Quelles intégraledans
sont les produits commandés dechaque
l’information
commande ?
décomposée https://
coursbenmakhlouf.me.
A.Benmakhlouf 9 ma/
Modèle Relationnel
Modèle Logique de données

Conception du monde réel:


Merise (MCD)
UML (diagramme de classe)

Modèle Logique de Données (MLD)


- Modèle Relationnel
- Modèle Orienté Objet
- Modèle Orienté Document
- Etc ….

A.Benmakhlouf 10 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Une Relation

Soient A1, A2, A3, ..., An n ensembles appelés domaine.


On appelle produit cartésien de A1, A2, A3, ..., An
l’ensemble A1 x A2 x A3 x ... x An défini par :

A1 x A2 x A3 x ... x An = {(x1, x2, x3, ..., xn)| xi  Ai }

un sous - ensemble du produit cartésien est appelé Relation

Un tuple sur (A1,A2, ..,An) est un élément du produit cartésien A1× ... × An

A.Benmakhlouf 11 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Une Relation

Exemple. Soient A = {1, 2, 3} et B = {a, b}.

On a : A x B = {(1, a), (2, a), (3, a), (1, b), (2, b), (3, b)}.

Le sous - ensemble = {(1, a), (1, b), (2, a), (2, b)} est une relation
définie sur les domaines A et B. La relation  peut s’écrire, également,
sous la forme :

 A B
  1 a
  1 b
  2 a
  2 b

A.Benmakhlouf 12 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Une Relation

Exemple. Considérons les domaines


Constructeur = {Fiat, Renault, Peugeot, Honda},
Modèle = {Tipo, Clio, Megane, 208, 308, 2008, Civic, accord}
Considérons la relation Voiture définie par :
Voiture Voiture
Immatriculation Constructeur Modèle
Constructeur Modèle
    1245-A-6 Fiat Fiat Tipo Tipo
    2245-A-6
Renault Renault Clio Clio
    Renault Renault
4245-B-6 Clio Clio
    Renault Renault Megane
12245-B-6 Megane
  Peugeot Peugeot 208
  45789-A-44 208
  Peugeot Peugeot 308
    45745-C-44 308
  Peugeot Peugeot 2008
1245-A-54 2008
 
  Honda Honda
9245-C-55 Civic Civic
 
    Honda Honda
1247-D-55 Civic Civic
  Honda Accord
  1245-A-56 Honda Accord
Honda Accord
  1245-B-56 Honda Accord
A.Benmakhlouf 13 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Schéma de Relation & Schéma de BDR

Un nom + une liste d’attributs + une liste d’attributs identifiants =


Schéma de relation

R(A1, A2, …., An)

l'ensemble des schémas de toutes les relations est appelé :


schéma d'une base de données relationnelle

R1(A11, A12, …., A1n)


R2(A21, A22, …., A2n)
...

Rp(Ap1, Ap2, …., Apn)

A.Benmakhlouf 14 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Schéma de Relation & Schéma de BDR

Exemple soit le schéma de relation suivant :

Clients (code client, Société, Contact, Fonction, Adresse, Ville)


Commandes(N°commande, DateCommande, Datelivraison)
Articles(Ref, NomArticle, Prix)

Introduction des identifiants externes

Clients (code client, Société, Contact, Fonction, Adresse, Ville)


Commandes(N°commande, DateCommande, Datelivraison,Code_client)
Articles(Ref, NomArticle, Prix)
LigneCommande(N°Commande, Ref, Quantité)

A.Benmakhlouf 15 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
 Règle du modèle relationnelle

Notion de dépendance fonctionnelle

Permet de passer d’un ensemble d’attribut non structuré à un modèle


conceptuel de données puis à un schéma de BDD cad à un ensemble de
relation bien structuré.

Pour quoi on dit que A1 est un attribut de R1 et non pas de R2 ????

Autrement dit on dit que A->B si pour chaque valeur de A on ne peut faire
correspondre qu’une seule valeur de B

A.Benmakhlouf 16 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
 Règle du modèle relationnelle

Notion de dépendance fonctionnelle

soit une relation R(A1, A2, …., An).


si A1 détermine tous les autres attributs A2, …., An : A1 -> A2, …., An 
alors on peut dire que A1 est un identifiant de R :
R(A1, A2, …., An).

Exemple:
Commandes(N°Commande, DateComande, Datelivraison, CodeClient,
nomClient)

Contre Exemple
Client(CodeClient, NomClient, Adresse, DateCommande)

A.Benmakhlouf 17 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
 Règle du modèle relationnelle

Notion de dépendance fonctionnelle composée

On peut avoir des DF composées. Si A1 et A2 détermine tous les autres


attribus A3, …., An on peut dire que (A1, A2) est un ID composé.

LigneCommande(N°Commande, Ref, Quantité)

A.Benmakhlouf 18 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
 Règle du modèle relationnelle

Notion de dépendance fonctionnelle Directe


Pour supprimer les redondances, nous devons avoir une dépendance
fonctionnelle directe (DFD) entre l’identifiant et les autres attributs non
identifiantes de la relation.
Une dépendance fonctionnelle x  y est directe s’il n’existe pas de propriété z
telle que : x  z et z  y.

Contre Exemple:
Commandes(N°Commande, DateComande, Datelivraison, CodeClient,
nomClient)

Client(CodeClient, NomClient, Adresse)

Commandes(N°Commande, DateComande, Datelivraison, CodeClient)


A.Benmakhlouf 19 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
 Règle du modèle relationnelle

Notion de Normalisation

Chaque relation dans le schéma de BDD doit être normalisée suivant trois FN:

1ère FN : Une relation est normalisée en 1ère FN si :


1. Elle possède une clé identifiant de manière unique et stable chaque ligne
2. Chaque attribut est monovalué (ne peut avoir qu’une seule valeur par
ligne)
3. Aucun attribut n’est décomposable en plusieurs attributs significatifs
Contre Exemple:

EMPLOYE (Nom, Enfants, Diplômes)

A.Benmakhlouf 20 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
 Règle du modèle relationnelle

Notion de Normalisation

2ème FN : Une relation R est en deuxième forme normale si et seulement si :


1. Elle est en 1FN
2. Tout attribut non clé est totalement dépendant de toute la clé. Autrement
dit, aucun des attributs ne dépend que d’une partie de la clé.

Contre Exemple:

LIGNE_COMMANDE(Num_cde, RéférenceProd, DésignationProd, Quantité)


 

A.Benmakhlouf 21 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
 Règle du modèle relationnelle

Notion de Normalisation

3ème FN : Une relation est en 3ème forme normale si et seulement si :


1. Elle est en 2° forme normale
2. Tout attribut doit dépendre directement de la clé, c'est-à-dire qu’aucun
attribut ne doit dépendre de la clé par transitivité. Autrement dit, aucun
attribut ne doit dépendre d’un autre attribut non clé.

Contre Exemple:

Produit(Ref, NomProduit, code_categ, nom_categ)

A.Benmakhlouf 22 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
 Règle du modèle relationnelle

Notion de Normalisation

Un modèle relationnel normalisé = relations avec :


1. Une clé, qui permet de distinguer chaque n-uplet
2. Des attributs élémentaires (1FN)
3. En dépendance de TOUTE la clé (2FN),
4. Et RIEN QUE de la clé (3FN)

A.Benmakhlouf 23 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
 Règle du modèle relationnelle

Identifiant Externe (Clé Etrangère)

Le schéma d'une relation comprend, en plus de la définition du nom de la


relation et de ses attributs, la définition de son (ses) identifiant, et celle de ses
identifiants externes, s'il en existe.

R1(a, b, c, ….)
R2(x, y, z, …..)
z Reference à R1(a)

si pour tout tuple de R2, la valeur prise par ‘z’ est nécessairement la
valeur de ‘a’ pour un tuple existant de R1.

A tout instant, l'ensemble des valeurs prises par ‘z’ est compris dans
l'ensemble des valeurs prises par ‘a’.

A.Benmakhlouf 24 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
 Règle du modèle relationnelle

l’Intégrité référentiel

Une fois déclaré l'identifiant externe Z sur R1.a le SGBD vérifie


automatiquement :

• toutes les insertions de tuples dans R2: il vérifie que la valeur de ‘z’ existe
dans R1. Si ce n'est pas le cas l'insertion dans R2 est refusée ;

• toutes les modifications de ‘z’: il vérifie que la nouvelle valeur de z existe dans
R1. Si ce n'est pas le cas la modification est refusée ;

• toutes les suppressions de tuples de R1 : il vérifie qu'il n'existe pas de tuple


dans R2 référençant ce tuple de R1 à supprimer. S'il en existe:
• soit la suppression est refusée,
• soit la suppression est propagée : les tuples de R2 qui référençaient cette
valeur de ‘a’ sont eux aussi supprimés.

A.Benmakhlouf 25 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
 Règle du modèle relationnelle

Contraintes d’Intégrité

Ce sont des règles qui restreintes les valeurs que peuvent prendre les données
d’un certain attribut d’une relation en plus de l’intégrité référentielle,

Les SGBDR offrent plusieurs mécanismes pour exprimer ces contraintes


d'intégrité. Comme par exemple dans Oracle :

1. Valeur obligatoire : clause « NOT NULL »


2. Identifiant : clauses PRIMARY KEY
3. Valeurs unique: clause « UNIQUE »
4. Valeurs qui vérifies une ou plusieurs condition: clause « CHECK »
5. Suppression des tuples d’une relation qui font référence à un tuples d’une
relation source qui va être supprimé: clause « CASCADE »

A.Benmakhlouf 26 https://coursbenmakhlouf.me.ma/
Algèbre Relationnelle

L'algèbre relationnelle est une théorie mathématique qui définit des


opérations qui peuvent être effectuées sur des relations (Tables).

Ces opérations permettent de représenter des requêtes sur la base de


données dont le résultat s’exprime sous la forme d’une relation (i.e. table).

Le formalisme de L'algèbre relationnelle est au cœur du langage de


requête de SQL.

Les principes de l'algèbre relationnelle sont utilisés par les SGBDR pour la


gestion des bases de données informatiques comme : 
Oracle, SQLserver, MySQL DBase, etc.

https://
coursbenmakhlouf.me.
A.Benmakhlouf 27 ma/
Algèbre Relationnelle

Nous pouvons distinguer trois familles d’opérateurs relationnels :

- Les opérateurs unaires (la sélection et la projection), permettent de produire


une nouvelle table à partir d’une autre table.

- Les opérateurs binaires ensemblistes (l’union, l’intersection et la différence)


permettent de produire une nouvelle relation à partir de deux relations de
même degré et de même domaine.

- Les opérateurs binaires ou n-aires (le produit cartésien, la jointure et la


division) permettent de produire une nouvelle table à partir de deux ou plusieurs
autres

https://
coursbenmakhlouf.me.
A.Benmakhlouf 28 ma/
Algèbre Relationnelle
 la Sélection
La sélection génère une relation regroupant exclusivement touts les attributs de la
relation R en vérifiant une expression logique « E ».
 

SQL

  SELECT * FROM Produit


WHERE Prix>=20

https://
coursbenmakhlouf.me.
A.Benmakhlouf 29 ma/
Algèbre Relationnelle
 Projection
La projection consiste à supprimer les attributs autres que (A1, A2,.., An) d’une
relation et à éliminer les occurrences en double apparaissant dans la nouvelle
version.
 

https://
coursbenmakhlouf.me.
A.Benmakhlouf 30 ma/
Algèbre Relationnelle
 Projection

SELECT RefProduit, NomProduit


SELECT RefProduit, NomProduit
FROM Produit
FROM Produit
WHERE Prix>=20
https://
coursbenmakhlouf.me.
A.Benmakhlouf 31 ma/
Algèbre Relationnelle
 Union
une opération portant sur deux relations R1 et R2 ayant le même schéma (même
attributs) et construisant une troisième relation constituée des enregistrements
appartenant à l’une ou l’autre des deux relations R1 et R2 sans doublant.
 

SELECT * from R1 UNION SELECT * from


R2;
https://
coursbenmakhlouf.me.
A.Benmakhlouf 32 ma/
Algèbre Relationnelle
 Intersection
une opération portant sur deux relations R1 et R2 ayant le même schéma et
construisant une troisième relation dont les enregistrements sont constitués de ceux
appartenant aux deux relations
  R1 - (R1 - R2)

selectselect
* from*R1 WHERE
from R1 EXISTS (select * from R2 where
R1.refproduit=R2.Refproduit
HERE R1.refproduit IN AND R1.NomProduit=R2.NomProduit);
(select R2.Refproduit from R2);

A.Benmakhlouf 33 https://coursbenmakhlouf.me.ma/
Algèbre Relationnelle
 Différence
La différence est une opération portant sur deux relations R1 et R2 ayant le même
schéma et construisant une troisième relation dont les n-uplets sont constitués de
ceux ne se trouvant que dans la relation R1.
R1 - R2

select * from R1 WHERE NOT EXISTS (select * from R2 where


select * from R1
R1.refproduit=R2.Refproduit AND
WHERE R1.refproduit NOT IN (select R2.Refproduit from R2); https://
R1.NomProduit=R2.NomProduit ); coursbenmakhlouf.me.
A.Benmakhlouf 34 ma/
Algèbre Relationnelle
 Différence
select * from R1
WHERE NOT EXISTS (select * from R2 where
R1.refproduit=R2.Refproduit);

select * from R1
WHERE R1.refproduit NOT IN (select R2.Refproduit from R2);
 La commande EXISTS vérifie s’il y a une présence ou non de lignes lors
de l’utilisation d’une sous-requête (si la sous-requête retourne un résultat
ou non)

 La Commande IN vérifie la concordance d’une à plusieurs données.

https://
coursbenmakhlouf.me.
A.Benmakhlouf 35 ma/
Algèbre Relationnelle
 Produit cartésien
Le produit cartésien est une opération portant sur deux relations R1 et R2 et qui
construit une troisième relation regroupant exclusivement toutes les possibilités de
combinaison des occurrences des relations R1 et R2
 

SELECT A, B, C, D
FROM R1, R2;

https://
coursbenmakhlouf.me.
A.Benmakhlouf 36 ma/
Algèbre Relationnelle
 Jointure
opération portant sur deux relations R1 et R2 qui construit une troisième relation
regroupant exclusivement toutes les possibilités de combinaison des occurrences
des relations R1 et R2 qui satisfont l’expression logique E. Il s’agit d’une opération
binaire commutative.

Une jointure est donc une sélection sur un produit cartésien.

SELECT A, B, C, D
FROM R1, R2
WHERE C>=30 AND B = ‘Z1’
https://
coursbenmakhlouf.me.
A.Benmakhlouf 37 ma/
Algèbre Relationnelle
 Équi-jointure
C’est une thêta-jointure dans laquelle l’expression logique E est un test d’égalité
entre un attribut A1 de la relation R1 et un attribut A2 de la relation R2.

SELECT A, B, C, D
FROM R1, R2, R3 https://
WHERE B=D AND D=Z; coursbenmakhlouf.me.
A.Benmakhlouf 38 ma/
Algèbre Relationnelle
 division
la division est une opération portant sur deux relations R1 et R2, telles
que le schéma de R2 est strictement inclus dans celui de R1,
Cette opération génère une troisième relation regroupant toutes les
parties d’occurrences de la relation R1 qui, associées à toutes les
occurrences de la relation R2, se retrouvent dans R1.

D=R1/R2
Donc
D x R2 ⊂ R1

https://
coursbenmakhlouf.me.
A.Benmakhlouf 39 ma/
Algèbre Relationnelle
 division

SELECT D FROM R1
WHERE D NOT IN (SELECT D FROM (
SELECT D, A FROM R1 T1R1, R2 WHERE
NOT EXISTS (SELECT * FROM R1 WHERE D=T1R1.D
AND A=E)));

A.Benmakhlouf 40 https://coursbenmakhlouf.me.ma/
Algèbre Relationnelle
 Division (Exemple)
Soit le modèle relationnel suivant :
Etudiant(NumEtudiant, NomEtudiant, PrénomEtudiant)
Module(NumModule, NomModule)
Inscrits(NumEtudiant, NumModule)

Liste des étudiants qui sont inscrits dans tous les modules (Res) :

Res = Inscrits ÷ Module

SELECT * FROM Etudiant WHERE NumEtudiant NOT IN


(SELECT NumEtudiant FROM (SELECT * FROM Etudiant TE, Module TM
WHERE NOT EXISTS
(SELECT * FROM Inscrits WHERE TE.NumEtudiant=Inscrits.NumEtudiant
AND TM.NumModule=Inscrits.NumModule)));
https://
coursbenmakhlouf.me.
A.Benmakhlouf 41 ma/
Manipulation et Interrogation des BDD
Langage SQL

SQL : Structured Query Language

Le langage SQL est utilisé par les principaux SGBDR : Oracle,


Access, SQL server, MySQL…

Chacun de ces SGBDR a cependant sa propre variante du


langage.

On présente un noyau de commandes disponibles sur


l'ensemble de ces SGBDR,

https://
coursbenmakhlouf.me.
A.Benmakhlouf 42 ma/
Manipulation et Interrogation des BDD
Langage SQL

SQL : Structured Query Language


SQL est un langage complet de gestion de bases de données
relationnelles. C’est un:
un langage d'interrogation de la base (ordre SELECT)

un langage de manipulation des données (LMD) (ordres UPDATE,


INSERT, DELETE)
un langage de définition des données (LDD) (ordres CREATE,
ALTER, DROP),
un langage de contrôle de l'accès aux données (LCD) (ordres
GRANT, REVOKE).

A.Benmakhlouf 43 https://coursbenmakhlouf.me.ma/
Manipulation et Interrogation des BDD
Langage SQL (Définition de données) (LDD)

La commande CREATE TABLE

Permet de créer une table dans la base de données courante.

CREATE TABLE table (champ1 type propriété, champ2 type


propriété,.. );

https://
coursbenmakhlouf.me.
A.Benmakhlouf 44 ma/
Manipulation et Interrogation des BDD
Langage
Type SQL (type deDescription
données)
Ce type est une chaine de caractères ayant une longueur constante
CHAR(longueur)
maximal de 4000 caractères.
Ce type est un date comprises entre le 1 er janvier avant Jésus-Christ et le
DATE
31 décembre 4712 après Jésus-Christ.
DOUBLE PRECISION Ce type est un nombre à virgule flottante allant de 10 -308 à 10308.
FLOAT(p) Ce type est un nombre à virgule flottante allant de 10 -308 à 10308.
INTEGER Ce type est un entier allant de -2 147 483 648 à 2 147 483 647.
LONG Ce type est un texte dont la taille maximale est de 2 147 483 647 octets.
Ce type est un nombre ayant longueur texte prédéfinit au niveau entier et
NUMERIC(M,Dec)
de ses décimales.
Ce type est un nombre ayant longueur texte prédéfinit au niveau entier
NUMBER(M,E)
entre 1 et 38 chiffres et d'une échelle entre -84 et 127.
TIME(Nb) Ce type est une heure avec le format 24 heures.
TIMESTAMP Ce type est un date et une heure.
Ce type est un une chaine de caractères ayant une longueur variable entre
VARCHAR2(longueur)
0 et 4096 caractères.

Exemple: X NUMBER(4,0) Exemple: X NUMBER(4,1)


X = 1,5E3 X = 1,564 E2
X = 1.5E4 erreur value larger X = 1.565456E2 valeur stockée est
than specified precision 156,5 45
Manipulation et Interrogation des BDD
Langage SQL (type de données numérique)

NUMBER : nombre à virgule flottante

NUMBER(taille_maxi) : nombre avec un nbre max de chiffre =


taille_max par défaut zéro chiffre après la virgule.

NUMBER(taille_maxi, décimales): nombre avec en total taille_max


chiffre dont décimales chiffre apès la virgule.

Exemple : NUMBER(6,2) 6 chiffres dont 2 après la virgule

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 46
Manipulation et Interrogation des BDD
Langage SQL (type de données chaine de caractère)

Les constantes chaînes de caractères sont entourées par des apostrophes.

Il existe deux types pour les colonnes qui contiennent des chaînes de
caractères :

le type CHAR pour les attributs qui contiennent des chaînes de longueur constante
inférieure à 2000 octets (pour Oracle). Cette chaîne de caractères est complétée par
des espaces si le nombre de char est inférieur à la longueur fixé dans char(),
CHAR(longueur)

le type VARCHAR2 pour les attributs qui contiennent des chaînes de longueur variable.
(4000 sous Oracle).
VARCHAR2(longueur) longueur est la longueur maximale en nombre de caractères
qu’il sera possible de stocker dans le champ.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 47
Manipulation et Interrogation des BDD
Langage SQL (type de données Date)

Date: chaine de caractère formé du jour du mois et année

Pour manipuler une date on utilise la fonction EXTRACT()

Syntaxe: Extract(Partie date from attribut_date)

Exemple: soit l’attribut Champ_Date dont les valeurs sont des dates:

Extract(year from Champ_date) as ANN

Extract(month from Champ_date) as mois

Extract(day from Champ_date) as jour

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 48
Manipulation et Interrogation des BDD
Langage SQL (type logique)

ce type est utiliser pour choisir dans la saisie entre vrai et faux (1 ou 0). Dans
oracle il y a la clause CHECK() qui permet de définir ce type de données.

CHECK (NomChamp IN (0,1))

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 49
Manipulation et Interrogation des BDD
Langage SQL (type incrémentation auto)

Se fait en trois étapes :


1. création d’une séquence
2. Création de la table avec un attribut numérique
3. L’activation de la séquence dans l’insertion des valeurs
CREATE SEQUENCE [schéma.]nomSéquence
[INCREMENT BY entier ]
[START WITH entier ]
[ { MAXVALUE entier | NOMAXVALUE } ]
[ { MINVALUE entier | NOMINVALUE } ]
create SEQUENCE test
SYNTAXESTART WITH 1; DESCRIPTION
INCREMENT BY intervalle entre les deux valeurs de la séquence (par défaut 1).
START WITHcreate
première valeur
table TB(a de la séquence à générer.
number(4,0));
MAXVALUE valeur maximale de la séquence.
MINVALUE insert
valeur minimale
into TB(a) de la
values séquence.
(test.nextval);

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 50
Manipulation et Interrogation des BDD
Langage SQL (Définition de données) (LDD)

Propriété de Donnée Signification


SQL(Access)
NULL ou NOT NULL autorise ou non que le champ puisse être vide.
UNIQUE indique que deux enregistrements ne pourront avoir la
même valeur dans ce champ.
PRIMARY KEY indique que ce champ est la clef primaire
REFERENCES Implique une intégrité référentielle

create table R1(A number(2,0) PRIMARY KEY, b varchar2(10),c DATE not null);

create table R2(X number(2,0) PRIMARY KEY, Y number(2,0), foreign key(y)


REFERENCES R1(A) ON DELETE CASCADE);

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 51
Manipulation et Interrogation des BDD
Client Produit
Commande
N°client 0,n Passer 1,1 Refproduit
Nom 1,n Détail_Com 0,n NomProduit
N°Commande
Prénom Quantité Prix
Datecommande
Adresse Stock
Validation
Ville

Client(N°client, Nom, Prénom, Adresse, Ville)


Produit(RefProduit, NomProduit, Prix, Stock)
Commande(N°Commande, DateCommande, Validation, #N°Client)
Détail_Com(N°Commande, Refproduit, Quantité)

A.Benmakhlouf https://coursbenmakhlouf.me.ma/
52
Manipulation et Interrogation des BDD
Langage SQL (Définition de données) (LDD)
Client(N°client, Nom, Prénom, Adresse, Ville)
CREATE TABLE Client (NClient NUMBER(4,0) PRIMARY KEY, Nom
VARCHAR2(10) NOT NULL, Prénom VARCHAR2(10), Adresse VARCHAR2(10),
Ville VARCHAR2(10));
Produit(RefProduit, NomProduit, Prix, Stock)
CREATE TABLE Produit (RefProduit VARCHAR2(4) PRIMARY KEY,
NomProduit VARCHAR2(10) NOT NULL, Prix FLOAT, Stock number(4,0));

Commande(N°Commande, DateCommande, Validation, #N°Client)


CREATE TABLE Commande (NumCommande NUMBER(4,0) PRIMARY KEY,
DateCommande Date NOT NULL, Validation number(1,0),
CHECK(Validation IN (0,1)),
NClient NUMBER(4,0), FOREIGN key(NClient) REFERENCES Client(NClient));

Détail_Com(N°Commande, Refproduit, Quantité)


CREATE TABLE Détail_Commande(NumCommande NUMBER(4,0)
REFERENCES Commande(NumCommande),
RefProduit VARCHAR2(4) REFERENCES Produit(RefProduit), Quantité
NUMBER(4,0) NOT NULL, PRIMARY KEY (NumCommande, RefProduit)); 53
Manipulation et Interrogation des BDD
Langage SQL (Définition de données) (LDD)

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 54
Manipulation et Interrogation des BDD
Langage SQL (Définition de données) (LDD)

La commande ALTER TABLE

Permet de modifier la structure d'une table

ALTER TABLE table Action (spécifications du champ);

ADD : Ajoute un champ a une table


DROP : Supprime un champ d'une table
MODIFY : Modifie les caractéristiques d'un champ

Exemple
ALTER TABLE Client ADD CodePostal TEXT NOT NULL;

https://
coursbenmakhlouf.me.
A.Benmakhlouf 55 ma/
Manipulation et Interrogation des BDD
Langage SQL (Manipulation de données) (LMD)

La commande INSERT

La commande INSERT est utilisée pour ajouter des enregistrements


ou des parties d'enregistrements dans des tables.
INSERT INTO table (champ1,champ2,...)
VALUES ('valeur1','valeur2',...);

INSERT INTO détailcommande (N°Commande, N°Produit, Quantité, PrixVente)


VALUES (113, 1, 2, 25);

https://
coursbenmakhlouf.me.
A.Benmakhlouf 56 ma/
Manipulation et Interrogation des BDD
Langage SQL (Manipulation de données) (LMD)

La commande UPDATE

changer des valeurs dans des champs d'une table


UPDATE table
SET champ1 = nouvelle_valeur1, champ2 = nouvelle_valeur2,
champ3 = nouvelle_valeur3
WHERE condition;

UPDATE Produit SET Prix = Prix*(1+0.05), Stock=Stock+6
WHERE RefProduit=‘’A210’’;

UPDATE Produit SET ‘Prix unitaire’ = ‘Prix unitaire’*(1-0.1)


WHERE ‘N°fournisseur’=7;

UPDATE Produit SET ‘Prix unitaire’ = ‘Prix unitaire’*(1-0.1)


WHERE ‘N°fournisseur’=7 AND Prix < 230; https://
coursbenmakhlouf.me.
A.Benmakhlouf ma/
57
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT

La commande SELECT est la commande la plus complexe de SQL


Permet de faire des requêtes pour récupérer des données dans les
tables.
Plusieurs Genre de Requêtes

- Requêtes simples
- Requêtes simples avec des critères
- Requêtes simples avec calcul sur les dates
- Requêtes simples avec création de nouveaux attributs
- Requêtes multi-tables avec regroupement et avec une
synthèse https://
coursbenmakhlouf.me.
A.Benmakhlouf 58 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT

Requêtes simples

SELECT `champ1 `, ` champ2 `, …  


FROM table1;

Exemple

SELECT CodeClient, NomClient, AdresseClient


FROM Client

SELECT *
FROM Client
https://
coursbenmakhlouf.me.
A.Benmakhlouf 59 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT

Requêtes simples avec critères


WHERE exp1 = exp2
WHERE exp1 != exp2
WHERE exp1 < exp2
WHERE exp1 > exp2
WHERE exp1 <= exp2
WHERE exp1 >= exp2
WHERE exp1 LIKE exp2
WHERE exp IS NULL
WHERE exp IS NOT NULL

https://
coursbenmakhlouf.me.
A.Benmakhlouf 60 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT

Requêtes simples avec critères

SELECT champ1, champ2, ....  


FROM Table1
WHERE condition;

Exemple
SELECT RefProduit, Désignation, PrixUnitaire
FROM Produit
WHERE PrixUnitaire <=120

Utilisation des Opérateurs AND et OR pour combiner plusieurs


critères https://
coursbenmakhlouf.me.
A.Benmakhlouf 61 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT

Requêtes simples avec critères


Pour classer les valeurs d’un champ on utilise l’opérateur ORDER BY

SELECT champ1, champ2, .... SELECT champ1, champ2, ....


FROM Table FROM Table
WHERE condition WHERE condition
ORDER BY champ1 ORDER BY champ1 DESC
descending
Exemple
SELECT RefProduit, Désignation, PrixUnitaire
FROM Produit
ORDER BY PrixUnitaire DESC https://
coursbenmakhlouf.me.
A.Benmakhlouf 62 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT

Requêtes simples avec création de nouveaux attributs


Par fois nous avons besoin de calculer des données à partir de données
brutes
SELECT champ1, formule AS Nouveau_champ
FROM table ;

Exemple
SELECT ‘nom du produit’, PUHT*(1+TVA) AS PTTC
FROM Produit

https://
coursbenmakhlouf.me.
A.Benmakhlouf 63 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT

Requêtes simples avec calcul sur les dates

Quelques fonctions dates

 EXTRACT(day from Champ_date) : Renvoie le jour de la date


 EXTRACT(month from Champ_date) : Renvoie le jour de la date
EXTRACT(year from Champ_date) : Renvoie le jour de la date
 SYSDATE : Renvoie la date actuelle (date du système)

https://
coursbenmakhlouf.me.
A.Benmakhlouf 64 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT

Requêtes simples avec calcul sur les dates


Exemple
SELECT N°Commande, DateCommande
FROM Commande
WHERE EXTRACT(YEAR from DateCommande) = EXTRACT(YEAR from SYSDATE)

SELECT N°Commande, DateCommande


FROM Commande
WHERE EXTRACT(MONTH from DateCommande)=EXTRACT(MONTH from
SYSDATE)-1
AND EXTRACT(YEAR from DateCommande) = EXTRACT(YEAR from SYSDATE)

https://
coursbenmakhlouf.me.
A.Benmakhlouf 65 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT

Requêtes simples avec calcul sur les dates


Exemple Commandes réalisées pendant le mois dernier

SELECT N°Commande, DateCommande


FROM Commande
WHERE EXTRACT(MONTH from DateCommande)=EXTRACT(MONTH from
SYSDATE)-1
AND EXTRACT(YEAR from DateCommande) = EXTRACT(YEAR from SYSDATE)

Attention Problème résultat erroné pendant la mois de Janvier

DECODE( expression , search , result [, search , result]... [, default] )

https://
coursbenmakhlouf.me.
A.Benmakhlouf 66 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT

Requêtes simples avec calcul sur les dates


Exemple Commandes réalisées pendant le mois dernier

DECODE( expression , search1 , result1 [, search2 , result2]... [, default] )


 Expression
SELECT : La valeur
NCommande, à comparer
DateCommande
 search
FROM : La valeur comparée à l'expression (exp = search1)
Commandes
 result :EXTRACT(MONTH
WHERE La valeur renvoyée,from
si expression est égale à search.
DateCommande)=decode(EXTRACT(MONTH from
 Defaut: Optionnel. Si aucune correspondance
SYSDATE),1,12,EXTRACT(MONTH from SYSDATE)n'est-1)
trouvée, la fonction DECODE
renverra
AND la valeur par
EXTRACT(YEAR défaut.
from DateCommande) = decode(EXTRACT(MONTH from
SYSDATE),1,EXTRACT(YEAR from SYSDATE)-1,EXTRACT(YEAR from SYSDATE));

https://
coursbenmakhlouf.me.
A.Benmakhlouf 67 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT

Requêtes MutiTables (Les Jointures)

Les jointures (Equi-jointure) permettent de sélectionner des


informations dans plusieurs tables grâce aux relations existant entre
ces tables.
 Les Jointures Internes
 Les Jointures Externes

https://
coursbenmakhlouf.me.
A.Benmakhlouf 68 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT

Requêtes MutiTables (Les Jointures)

 Les Jointures Internes

R1 (a1, b1, c1, d1)


R2 (a2, b2, c2, a1)

SELECT R1.a1, b1, b2, c2 SELECT R1.a1, b1, b2, c2


FROM R1, R2 FROM R1 INNER JOIN R2
WHERE R1.a1 = R2.a1 ON R1.a1 = R2.a1

https://
coursbenmakhlouf.me.
A.Benmakhlouf 69 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

Requêtes MutiTables (Les Jointures Internes)


Client
N° Client Commande
Nom Réalise
Prénom N° Commande
0,n 1,1 Date commande
Ville
Validation

https://
coursbenmakhlouf.me.
A.Benmakhlouf 70 ma/
N°Client Nom Prénom Ville N°Com DateCom Validation N°Client
CL1 Nom1 Prénom1 Ville1 C1 12/03/2014 OUI CL1
CL2 Nom2 Prénom2 Ville2 C2 12/04/2014 OUI CL2
CL3 Nom3 Prénom3 Ville3 C3 12/05/2014 OUI CL2
CL4 Nom4 Prénom4 Ville4 C4 12/05/2014 OUI CL2

SELECT Client.N°Client, Nom, N°Com, DateCom


FROM Client INNER JOIN Commande
ON Client.N°Client = Commande.N°Client

N°Client Nom N°Com DateCom


CL1 Nom1 C1 12/03/2014
CL2 Nom2 C2 12/04/2014
CL2 Nom2 C3 12/05/2014
CL2 Nom2 C4 12/05/2014

Les clients qui n’ont pas réalisé de commande ne figureront pas dans la liste

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 71
Manipulation et Interrogation des BDD
Requêtes MutiTables (Les Jointures Externes)
Des jointures qui permettent d’afficher tous les occurrences de la table qui se trouve
à droite de la jointure (à gauche de la jointure) tout en vérifiant l’égalité entre les
attributs joint.

R1 (a1, b1, c1, d1) SELECT R1.a1, b1, b2, c2


R2 (a2, b2, c2, a1) FROM R1 LEFT JOIN R2
ON R1.a1 = R2.a1

SELECT R1.a1, b1, b2, c2


FROM R1 RIGHT JOIN R2
ON R1.a1 = R2.a1

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 72
N°Client Nom Prénom Ville N°Com DateCom Validation N°Client
CL1 Nom1 Prénom1 Ville1 C1 12/03/2014 OUI CL1
CL2 Nom2 Prénom2 Ville2 C2 12/04/2014 OUI CL2
CL3 Nom3 Prénom3 Ville3 C3 12/05/2014 OUI CL2
CL4 Nom4 Prénom4 Ville4 C4 12/05/2014 OUI CL2

SELECT Client.N°Client, Nom, N°Com, DateCom


FROM Client LEFT JOIN Commande
ON Client.N°Client = Commande.N°Client

N°Client Nom N°Com DateCom


CL1 Nom1 C1 12/03/2014
CL2 Nom2 C2 12/04/2014
CL2 Nom2 C3 12/05/2014
CL2 Nom2 C4 12/05/2014
CL3 Nom3
CL4 Nom4 73
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

La commande SELECT
Requêtes MutiTables avec Regroupement et synthèse
Dans le cas
SELECT de relations
Nclient, Nom,1 Prenom,
à plusieurs on peut faire des
Adresse,COUNT(N°Com) as nbre
synthèses
FROM avec Left
Clients des regroupements
JOIN Commande
ON Clients.Nclient=Commandes.Nclient
GROUP BY Nclient, Nom, Prenom, Adresse;
N°Client Nom N°Com
N°Client Nom Nbre CL1 Nom1 C1
CL1 Nom1 1 CL2 Nom2 C2
CL2 Nom2 3 CL2 Nom2 C3
CL3 Nom3 0 CL2 Nom2 C4
CL4 Nom4 0 CL3 Nom3
A.Benmakhlouf 74 CL4 Nom4
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

N°Employé N°Commande N°Employé N°Commande

E1 C1 E1 C1
E2 C2 E1 C3
E1 C3 Regroupement E2 C2
E3 C4 E2 C6
E4 C5 E2 C10
E2 C6 E3 C4
E5 C7 E4 C5
E4 C8 E4 C8
E5 C9 E5 C7

E2 C10 E5 C9

N°Employé Nbre Commande

E1 2
E2 3
E3 1
E4 2 Regrouper N° Employé
Et
E5 2
Compter N° Commande
A.Benmakhlouf 75
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

Requête Multi-Table contenant plusieurs jointures

(((Table1 Jointure Table2) Jointure Table3) Jointure Table4)…….

https://
coursbenmakhlouf.me.
A.Benmakhlouf 76 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)

Montant total par Client

SELECT Clients.codeclient, société, SUM(Prixunitaire*Quantité) AS CA


FROM (((Clients INNER JOIN Commandes
ON Clients.codeclient=Commandes.codeclient)
INNER JOIN [Détails Commandes]
ON Commandes.N°commande=[Détails Commandes].N°commande)
INNER JOIN Produits
ON [Détails Commandes].Réfproduit=Produits.Réfproduit)
GROUP BY Clients.codeclient, société;
77
Sous Requêtes

On peut imbriquer autant de requêtes que l'on veut. La condition après la


clause WHERE peut porter sur le résultat d'une autre requête (ou sous-
requête).

SELECT Réfproduit, Designation, Prixunitaire


FROM Produits
WHERE Prixunitaire > (SELECT AVG(Prixunitaire) FROM Produits);

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 78
L’UNION
Lorsqu'on veut que les résultats de plusieurs requêtes soient combinés entre eux,
on utilise la clause UNION. UNION va fusionner les résultats des requêtes.

SELECT Champ1, Champ2 FROM Table1


UNION SELECT Champ1, Champ2 FROM Table2;

Professeur 1,1 Module


0,n Enseigner_
CodeProf Cours N°Module
NomProf NomModule
PrenomProf HeuresTP
TelProf HeuresCours
0,n
Enseigner 1,1
_TP

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 79
Professeur 0,n Module
CodeProf Enseigner 1,1 N°Module
NomProf Cours NomModule
PrenomProf HeuresTP
TelProf HeuresCours
0,n
1,1
Enseigner
TP

HeuresTP HeuresCours
SELECT CodeProf, NomProf, SELECT CodeProf, NomProf,
SUM(HeuresTP) AS HTotal Sum(HeuresCours) AS HTotal
FROM Prof INNER JOIN [Module] FROM Prof INNER JOIN [Module]
ON Prof.CodeProf=Module.CodeProfTP ON Prof.CodeProf = Module.CodeProfCours
GROUP BY CodeProf, NomProf; GROUP BY CodeProf, NomProf;

HeuresTotal
SELECT CodeProf, NomProf, SUM(HTotal) AS HCoursTP
FROM (SELECT* FROM HeuresCours UNION SELECT* FROM HeuresTP)
GROUP BY CodeProf, NomProf;

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 80
La Suppression et la mise à jour en cascade

Dans le cas normal on ne peut pas supprimer un enregistrement ou mettre à jour la


valeur de la clé de la table de ma table source qui se trouve dans la table cible.

On peut permettre une suppression ou une mise à jour en cascade

CREATE TABLE [Table1] (a1 Text PRIMARY Key, b1 Text, c1 Text, d1 Text)

CREATE TABLE [Table2] (a2 Text PRIMARY Key, b2 Text, c2 Text, a1 Text
REFERENCES Table1(a1) ON DELETE CASCADE ON UPDATE CASCADE)

CREATE TABLE [Table3] (a3 Text PRIMARY Key, b3 Text, c3 Text, a2 Text
REFERENCES Table2(a2) ON DELETE CASCADE ON UPDATE CASCADE)

CREATE TABLE [Table4] (a4 Text PRIMARY Key, b4 Text, c4 Text, a3 Text
REFERENCES Table3(a3) ON DELETE CASCADE ON UPDATE CASCADE)
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ Vers Chapitre-2 81
Chapitre-I

Optimisation des
Requêtes SQL

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 82
Optimisation des Requêtes SQL

Le temps d’exécution d’une requête SQL dépend de


 la structure avec laquelle les opérations algébriques sont écrite
 mode d’accès aux données.
 Les algorithmes utilisés pour effectuer le jointures
 Possibilité de matérialiser les vues

L’optimisation est donc une opération avec laquelle plusieurs


plans d’exécution sont examiné dans l’objectif est de sélectionner
celui qui un coût minimum.

Le Coût est défini principalement par le calcule du nombre


d’entrès/sorties du disque

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 83
Optimisation des Requêtes SQL
1. L’optimisation par réécriture Algébrique des Requêtes

2. L’optimisation par Indexation : définition du mode d’accès


au données
 Index B
 Index bitmap
 Index de Hachage

3. L’optimisation par les algorithmes de jointure


 jointure avec boucles imbriquées;
 Jointure avec index
 Jointure tri-fusion
 Jointure par hachage

4. Optimisation par création des Vues matérialisées


A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 84
Traitement d’une requête

L’SQL est un Obtenir des


langage Requêtes de Lecture
informations
déclaratif

?????
Comment le SGBD va obtenir ces
informations (execute les requêtes)

Les SGBDR possèdent un optimiseur qui détermine la façon


d’exécuter la requête en choisissant le meilleur plan d’exécution,
puis exécuter le plan choisi.
Les SGBD traitent les Requêtes en trois étapes :
la décomposition, l’optimisation et l’évaluation.
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 85
La décomposition

Analyse syntaxique: faisant correspondre la structure globale à la syntaxe du


langage. Examiner les caractères saisis et les reconnaître comme des commandes
des instructions ou des commentaires

Analyse sémantique : Vérifier l’exitance dans la BDD des attributs et des


tables utilisés dans la requête. Ainsi la détection des incohérences dans les
opérations réalisées sur les attributs.

Simplification : Simplifier les expressions logiques utilisées dans les


sélections. example: (A OR non B) AND B = A AND B

Traduction Algébrique : Produire une expression algébrique équivalente à la


requête SQL.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 86
La décomposition Traduction Algébrique :

Exemple : Soit le schéma relationnel suivant :


 
Cinéma (IDcinéma, nom, adresse)
Salle (IDsalle, IDcinéma, capacité)
Séance (IDsalle, IDfilm, heuredébut)
Film (IDfilm, réalisateur, année)
 
Soit la requête suivante: la liste des films projetés au Multiplex à 20 heures ?
SELECT Séance.IDfilm
FROM Cinéma, Salle, Séance
WHERE Cinéma.nom = 'Multiplex' AND
Séance.heuredébut = 20 AND
Cinéma.IDcinéma = Salle.IDcinéma AND
Salle.IDsalle = Séance.IDsalle

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 87
L’écriture algébrique de cette requête est donnée par :
pfilm (snom = 'Multiplex' Ù heure-début = 20 ((Cinéma ⨝ Salle) ⨝ Séance)

Le plan d’exécution de l’expression algébrique relationnelle est :

SELECT Séance.IDfilm
FROM Cinéma, Salle, Séance
WHERE Cinéma.nom = 'Multiplex’
AND
Séance.heuredébut = 20
AND
Cinéma.IDcinéma = Salle.IDcinéma
AND
Salle.IDsalle = Séance.IDsalle

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 88
Soit la requête-2 suivante qui donne la liste des films des réalisateurs ‘Scorsese’
et ‘Spielberg’ projetés au Multiplex à 20 heures ?

SELECT Séance.IDfilm, année


FROM Cinéma, Salle, Séance, film
WHERE Cinéma.nom = 'Multiplex' AND
Séance.heure-début = 20 AND
(réalisateur=' Scorsese' OR réalisateur=' Spielberg ') AND
Cinéma.ID-cinéma = Salle.ID-cinéma AND
Salle.ID-salle = Séance.ID-salle
Séance.IDfilm=film.IDfilm

L’écriture algébrique de cette requête est donnée par :


pidfilm, annee (snom = 'Multiplex' Ù heure-début = 20 Ù (réalisateur=' Scorsese' V réalisateur='Spielberg ') (((Cinéma
⨝ Salle) ⨝ Séance) ⨝ film)

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 89
Le plan d’exécution de l’expression algébrique relationnelle est :

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 90
L’Optimisation par Réécriture Algébrique

 Pour une requête il y a plusieurs expressions algébriques équivalentes.


 Le rôle principal de l’optimiseur est de trouver ces expressions puis
évaluer leurs coûts et choisir la meilleure.
 On peut passer d'une expression à une autre équivalente en utilisant des
règles de réécriture. Les plus importantes de ces règles sont :

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 91
– Commutativité des jointures
R⨝SºS⨝R
– Associativité des jointures
(R ⨝ S) ⨝ T º R ⨝ (S ⨝ T )
– Regroupement des sélections
sA='a' Ù B='b' (R) º sA='a' ( sB='b' (R))
– Commutativité de la sélection et de la projection
pA1,…, An ( sAi='a' (R)) º sAi='a' (pA1,…, An (R)) , i Î{1, …, n}
– Commutativité de la sélection et de la jointure
sA='a' (R(…, A, …) ⨝ S ) º sA='a' (R) ⨝ S
– Distributivité de la sélection sur l'union (pareil pour la différence)
sA='a' (R È S ) º sA='a' (R) È sA='a' (S)
– Commutativité de la projection et de la jointure
pA1,…, An, B1, …, Bm, (R ⨝Ai = Bj S ) º pA1,…, An(R) ⨝ Ai = Bj pB1, …, Bm(S)
– Distributivité
A.Benmakhlouf
de la projectionhttps://coursbenmakhlouf.me.ma/
sur l'union (pareil pour la différence) 92
L’objectif principale de l’optimiseur est d’appliquer ces règles pour restructurer
(réécrire) la requête afin de réduire le coût. Un algorithme de restructuration simple
peut être donné par :

1. Descendre les sélections le plus bas possible dans l'arbre (règles de commutativité et
distributivité de la sélection)

2. Regrouper les sélections sur une même relation (règle de regroupement des
sélections)

3. Réaliser les sélections d’abord, pour réduire la taille des données


- On réalise d'abord les sélections, car c'est l'opérateur le plus "réducteur"
- On réalise les jointures (opération très coûteuse) une fois que la taille des données a
été réduite au maximum

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 93
Initiale: pfilm (snom = 'Multiplex' Ù heure-début = 20 ((Cinéma ⨝ Salle) ⨝ Séance)
Optimisé: pfilm ((snom = 'Multiplex' (Cinéma) ⨝ Salle) ⨝ sheuredébut = 20 (Séance))

SELECT Séance.IDfilm SELECT S.IDfilm


FROM Cinéma, Salle, Séance FROM (SELECT Idclinéma, nom
WHERE nom = 'Multiplex’ WHERE Cinéma.nom = 'Multiplex’) C,
AND heuredébut = 20 Salle, (SELECT Idséance, heuredébut
AND Cinéma.IDcinéma = Salle.IDcinéma FROM séance WHERE heuredébut = 20) S
AND Salle.IDsalle = Séance.IDsalle WHERE C.IDcinéma = Salle.IDcinéma
AND Salle.IDsalle = S.IDsalle

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 94
Initiale :
pidfilm, annee (snom = 'Multiplex' Ù heure-début = 20 Ù (réalisateur=' Scorsese' V réalisateur='Spielberg ')
(((Cinéma ⨝ Salle) ⨝ Séance) ⨝ film)

Optimisé :
pidfilm, annee (((snom = 'Multiplex'(Cinéma) ⨝ Salle) ⨝
s heure-début = 20(Séance)) ⨝sréalisateur=' Scorsese' V réalisateur='Spielberg '(film))

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 95
L’Optimisation par choix du mode d’accès aux données
L’organisation physique des données

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 96
L’organisation physique des données
 La mémoire secondaire est divisée en pages (ou blocs) de taille égale
constituées de même nombre de secteurs contigus.
 La page est l'unité d'échange entre les mémoires secondaire et principale.
 Un secteur représente la plus petite surface d’adressage

Le coût des opérations dans les BDD est évalué principalement par le nombre de
lectures/écritures de pages c.-à-d. nbre d’accès au disque

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 97
Les blocs ORACLE
La taille d’un bloc est un multiple de la taille des blocs du système d’exploitation. À
titre d’exemple, un bloc dans un OS occupe 1024 octets, et un bloc ORACLE
occupe typiquement 4 096 ou 8 092 octets.

1. l’entête (header) contient l’adresse du bloc, et son type (données, index, etc)


2. le répertoire des tables donne la liste des tables pour lesquelles des
informations sont stockées dans le bloc;
3. le répertoire des enregistrements contient les adresses des enregistrements du
bloc;
4. un espace libre est laissé pour faciliter l’insertion de nouveaux enregistrements,
ou l’agrandissement des enregistrements du bloc (Attribut NULL
5. enfin, l’espace des données contient les enregistrements.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 98
 Les données sur disque sont stockées dans des fichiers.
 Chaque fichier occupe plusieurs pages (bloc) sur disque.
 Un fichier stocke un ensemble d'articles (enregistrements, n-uplets, lignes).
 Un article est une séquence de champs ou attributs. Il existe deux types
d'articles :
o Articles en format fixe : la taille de chaque champ est fixée
o Articles en format variable : la taille de certains champs est variable.
 l’adresse d’un article (ROWID) est composé de l’adresse page plus l’indice
de l'article dans la page.

Bloc 1 Bloc 2 Bloc 3 Bloc 4

Annie Hall, 1977 Greystoke, 1984 Metropolis, 1926 Smoke, 1995


Brasil, 1984 Jurassic Park, 1970 Psychose, 1960 Twin Peaks, 1990
Casablanca, 1942, Impitoyable, 1992 Reservoir Dogs, 1992 Underground, 1995
Easy Rider, 1969 Manhattan, 1979 Shining, 1980 Vertigo, 1958

Fichier de données

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 99
Accès aux données : Accès Séquentiel
Données non triées

Dans le cas d’une sélection à un au plusieurs critères on doit, partir du début du


fichier, charger un par un tous les enregistrements en mémoire centrale, et
effectuer à ce moment-là le test sur les critères de sélection
Le Coût:
Si le fichier, où on fait la recherche, est stocké dans n pages Le coût
d’une recherche par valeur de champs est :

 Si la clé est non unique: on doit lire les n pages : C = n


 Si la clé est unique: on doit lire en moyenne n/2 pages: C = n/2

Bloc 1 Bloc 2 Bloc 3 Bloc 4

Annie Hall, 1977 Greystoke, 1984 Metropolis, 1926 Smoke, 1995


Brasil, 1984 Jurassic Park, 1970 Psychose, 1960 Twin Peaks, 1990
Casablanca, 1942, Impitoyable, 1992 Reservoir Dogs, 1992 Underground, 1995
Easy Rider, 1969 Manhattan, 1979 Shining, 1980 Vertigo, 1958
Entrée table « film » Champ Année Unique
Sortie table « film1997 »
n: nombre de n-uplet
i=1
Film1997 =
TANTQUE (Année # 1997 et i < n)
i = i + 1
FIN TANTQUE
SI(Année = 1997) alors
film1997 = film1997 U
FIN Si
Entrée table « film » Champ Année
Sortie table « film1997 » non Unique
n: nombre de n-uplet
i=1
Film1997 =
Pour i=1 à i=n
SI(Année = 1997) alors
film1997 = film1997 U
FIN Si
A.Benmakhlouf FINPOUR
https://coursbenmakhlouf.me.ma/ 101
Accès aux données : Accès Séquentiel
Données triées sur la champ critère

Le SGBD effectue une recherche par dichotomie qui est beaucoup plus rapide. Cet
algorithme permet de diminuer par deux, à chaque étape, la taille de l’espace de
recherche
Le Coût:
Si on suppose que le fichier où on fait la recherche est stocké dans n
pages, la taille de l’espace de recherche se réduit à n/2k dans l’étape k.
Le coût d’une recherche par valeur de champs est C=log2(n)

SELECT * FROM film


Where Année=1992

Bloc 1 Bloc 2 Bloc 3 Bloc 4

Metropolis, 1926 Easy Rider, 1969 Shining, 1980 Impitoyable, 1992


Casablanca, 1942, Jurassic Park, 1970 Brasil, 1984 Reservoir Dogs, 1992
Vertigo, 1958 Annie Hall, 1977 Greystoke, 1984 Smoke, 1995
Psychose, 1960 Manhattan, 1979 Twin Peaks, 1990 Underground, 1995
Entrée table « film » Champ Année Trié
Sortie table « film1997 »
n: nombre de n-uplet
Debut = 1
Fin = n
Milieu = (debut+fin)/2
Film1997 =
TANTQUE (Annéemilieu # 1997 et Debut < Fin)
Si (Annéemilieu <1997) Alors
Fin=milieu-1
Sinon
debut=milieu+1
Milieu = (debut+fin)/2
FIN TANTQUE
TANTQUE(Annéemilieu = 1997) alors
film1997 = film1997 U
Milieu= Milieu+1
FIN TANTQUE

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 103


Accès aux données : Accès Séquentiel Indexé
Un index est une structure de données utilisée par les SGBD pour facilite et
accélère les opérations de recherche de tri, de jointure ou d'agrégation.

Les index doivent être utilisés sur les attributs qui sont :
 fréquemment soumises à des recherches.
 Souvent mobilisés dans une jointure (clé Etrangère)
 Très discriminés (c'est à dire pour lesquels peu d'enregistrements ont les
mêmes valeurs)
 Rarement modifiés
Oracle créé systématiquement un index chaque fois que l’on crée une clef
primaire (PRIMARY KEY) ou une contrainte d’unicité (UNIQUE) sur une table

Inconvénients des index


 Les index diminuent les performances en mise à jour (puisqu'il faut mettre à
jour les index en même temps que les données).
 Les index ajoutent du volume à la base de données et leur volume peut
devenir non négligeable.
L’indexation des fichiers

Un index est un fichier structuré dont les enregistrements sont des entrées.


 Une entrée d’index est un enregistrement constitué d’une paire de valeurs
(clé-adresse)
 Une clé d’indexation est la liste d’attributs indexés d’une table.
 Une adresse est un emplacement physique dans la base de données,
qui peut être soit celle d’un bloc (ensemble d’enregistrement charger
dans la RAM), soit plus précisément celle d’un enregistrement (rowid)
dans un bloc.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 105


L’indexation des fichiers Index non dense

C’est le cas où le fichier est trié sur la clé d’indexation,


l’entrés de l’index est [titre, Adresse]

Puisque le fichier est trié sur la clé on ne fait figurer dans l’index que les valeurs de
clé du premier enregistrement de chaque bloc.
L’index est trié sur la clé.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 106


L’indexation des fichiers Index dense

C’est le cas où le fichier est trié sur un attribut différent de la clé d’indexation.
L’entrés de l’index est [Année, Adresse]

Augmentation de la taille de l’indexe : Toutes les valeurs indexé seront reportées


dans l’index.
l’index n’est pas unique : une même valeur de la clé d’indexation sont associées
plusieurs adresses correspondant aux enregistrements liés à cette valeur de la clé.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 107


L’indexation des fichiers Index multi-niveau
Puisqu’un index dense est un fichier constitué d’entrées [clé, adr] trié sur la clé On
peut : ajouter un deuxième niveau d’indexation où on utilise les principes des index
non-denses

Très efficaces en recherche, même pour des BDD de très grande taille. L’inconvenant
c’est la difficulté d’insertion et suppression et de Recherche sur intervalle (lecture
aléatoire dans le fichier de données pour chaque entrée de l’intervalle)
L’indexation des fichiers Index Arbre-B (Tree-B)

C’est le type d’index utilisé dans les SGBD (Oracle).


Facilite les insertion, les suppressions et les recherches à travers une
gestion dynamique des nœuds.

CREATE INDEX nom_index ON


nom_table(NomColonneClé1,
NomColonneClé2, ...);
L’indexation des fichiers Index Arbre-B (Tree-B)

Les arbres-B d’ordre k sont :


- Des arbres équilibrés 
- Si un bloc peut contenir au maximum n entrées, alors l’ordre de l’arbre-
B est k=n/2.
- Chaque nœud occupe une page et contient n entrées tel que k≤ n≤ 2k. Seule
exception : la racine qui contient entre 1 et 2k entrées
- Les entrés d'un nœud sont triés sur la clé
- Chaque nœud interne avec n entrées a n+1 fils
o Chaque nœud interne est un index pour ses fils/descendants
o Les n entrées sont triés suivant l’ordre croissant (k ≤ n ≤ 2k)
 C1 ≤ C2 ≤ … ≤ Cn : clés
 R1 , …, Rn : information associée aux clés En général Ri = l’adresse
physique (ROWID) de l’entrée de clé Ci
L’indexation des fichiers Index Arbre-B (Tree-B)

Les arbres-B d’ordre k sont/ont :


o n+1 pointeurs vers les nœuds fils dans l'index: P1 , …, Pn+1
 Contrainte : toutes les clés x dans le sous-arbre pointé par P i
respectent la condition Ci-1 < x < Ci (2 ≤ i ≤ n)
 Pour i=1 x < C1, pour i=n+1  x>Cn

o Le niveau le plus bas est appelé « niveau des feuilles », constitue un


index dense sur le fichier de données. On trouve dans ce niveau les
entrées d’index composées des pairs valeur de clé et adresse vers un
enregistrement du fichier de données
L’indexation des fichiers Index Arbre-B (Tree-B)

L’index -B sur l’année de parution des films

le niveau des feuilles de l’arbre B est constitué d’une liste chaînée de blocs, ce qui
permet la réorganisation rapide et dynamique de la liste pour y insérer ou supprimer
de blocs et des enregistrements contrairement à l’indexe classique
L’indexation des fichiers Index Arbre-B (Tree-B)
Recherche dans un arbre-B

Partant de la racine, on parcourt récursivement l’arbre ; à chaque nœud, on


choisit le sous-arbre fils dont les clés sont comprises entre les mêmes bornes
que celles de la clé recherchée.

SELECT * FROM film SELECT * FROM film


Where Année=1996 Where Année betwen 1986 AND 1996
L’indexation des fichiers Index Arbre-B (Tree-B)
Recherche dans un arbre-B
On définit la structure nœud composée des
membres :
- taille : le nombre de clés dans chaque nœud
- clé[] : tableau des clés d’un nœud
- branche[] ; tableau de pointeur vers les
fonction Recherche(nœud, x) arbres fils.
i=0 - feuil : variable Boolean informant si un
tant que i<nœud.taille et x>nœud.clé[i] nœud appartient au niveau feuil ou non.
i=i+1
si nœud.feuil
si x=nœud.clé[i]
renvoyer clé[i]
sinon si i=nœud.taille
renvoyer « Valeur non trouvée »
FinSi
sinon si i=nœud.taille et x>nœud.cle[i]
Recherche(nœud.branche[nœud.taille-1], x)
sinon
Recherche(nœud.branche[i], x)
FinSi
L’indexation des fichiers Index Arbre-B (Tree-B)
Insertion dans un arbre-B

D’une part on insère le nouveau tuple dans la table de données d’une manière
séquentielles. Et d’autre part on insère une nouvelle entrée dans l’index en
procédant de la manière suivante :
- On cherche l’endroit où on doit insérer la clé d’indexation (année). On part de
la racine, et on suit les adresses comme si on recherchait dans un arbre de
recherche un enregistrement pour la valeur de clé à insérer.
- Si la feuille où on veut insérer n’est pas pleine (<2k) on ajoute la nouvelle
entée sans porter aucun changement aux nœuds des feuilles internes mais en
maintenant les valeurs triées.
- Si non il y a éclatement du nœud et remontée d’une manière récursive de la
clé médiane au niveau du père.
1977 1979 1960
1958 1984
1969 1986
1990 1995 1992 2000

Vertigo, 1958 Easy Rider, 1969 Anny,1979


Brasil, 1984 Psychose, 1960 Taxi, 2000
Reservoir No Time,1986
Twin Peaks, 1990
Dogs,1992
Underground, 1995 Annie Hall,1977
L’indexation des fichiers Index Arbre-B (Tree-B)
Insertion dans un arbre-B

Index Arbre-b d’ordre 2

1969 1984 1988 1992

1958 1960 1977 1979 1986 1987 1989 1990 1993 1997
1999
1995 2000

Vertigo, 1958 Easy Rider, 1969 Anny,1979 Miracle,1989 Parker,1997


Brasil, 1984 Psychose, 1960 Taxi, 2000 Tomorow,1987
Twin Peaks, 1990 Reservoir
No Time,1986 Drive,1999
Dogs,1992
Underground, 1995 Annie Hall,1977 Apocalypse,1988 Tomorow,1993
L’indexation des fichiers Index Arbre-B (Tree-B)
Suppression dans un arbre-B

4
La suppression se fait toujours au niveau des feuilles
3
- Si la clé à supprimé n’est pas dans une feuille alors on la remplace par la plus
grande valeur des plus petite des clés des fils (ou bien par la 2plus petite des
plus grand)
- 1 amène à
Si la suppression de la clé d'une feuille (récursivement d'un nœud)
avoir moins de k clés :
o Combinaison avec un nœud voisin (avant ou après)
o Descente de la clé associant ces deux nœuds (éclatement du nœud si
nécessaire et donc remonté d'une nouvelle clé)
L’indexation des fichiers Index bitmap

La base de données stocke une image bitmap pour chaque clé d'index

CREATE BITMAP INDEX nom_index ON


nom_table(NomColonneClé1, NomColonneClé2, ...);

Les indexes bitmap sont efficace lorsque :


 Les colonnes indexées ont faible cardinalité, c'est-à-dire que le nombre de
valeurs distinctes est petit par rapport au nombre de lignes du tableau.
 La table indexée est en lecture seule ou n'est pas cible de modification
significative par les instructions LMD.

Les index bitmap sont donc principalement destinés aux applications


d'entreposage de données (Les Data Warehouse

119
L’indexation des fichiers Index bitmap

Exemple : Soit la table « clients » suivante :

L’index bitmap sur le champ « villeclient » est donné par :


RowID Casablanc EL-Jadida Fès Marrakech Meknès Mohammedia Rabat
a
1 0 0 0 0 0 0 1
2 0 0 0 1 0 0 0
3 1 0 0 0 0 0 0
4 0 0 0 0 0 1 0
5 0 1 0 0 0 0 0
6 0 1 0 0 0 0 0
7 0 0 0 0 0 0 1
8 0 0 0 0 0 0 1
9 0 0 1 0 0 0 0
10 0 0 0 0 1 0 0 120
L’indexation des fichiers Index bitmap

SELECT * from clients WHERE Villeclient=’Rabat’

revient à sélectionner dans la table de l’index bitmap les rowid ayant Rabat = 1

RowID Casa EL-Jadida Fès Marrakech Meknès Mohammedia Rabat


1 0 0 0 0 0 0 1
7 0 0 0 0 0 0 1
8 0 0 0 0 0 0 1

121
L’indexation des fichiers Index bitmap

Le véritable avantage de l'indexation bitmap se produit lorsqu'une table comprend


plusieurs index bitmap. 

SELECT * FROM clients where VilleClient=’Rabat’ AND Genre=’Homme’;

Rowid VilleClient=’Rabat’ AND Genre=’Homme’

7 1
8 1

122
L’indexation des fichiers Index de Hachage

le hachage, consiste à créer une structure de hachage dont les données sont
partiellement en mémoire RAM et partiellement sur le disque.
Indexé par hachage une table suivant une clé « c » revient à utiliser une fonction
de hachage qui, pour chaque valeur de clé c, donne l’adresse f(c) d’un espace de
stockage où l’élément doit être placé.
o En mémoire principale cet espace de stockage est en général une liste chaînée,
o En mémoire secondaire une séquence de blocs sur le disque que nous
appellerons fragment (bucket en anglais).

Exemple: Une table film de 16 n-uplets et 5 fragments numérotés de 0 à 4. On va


indexer par Hachage suivant le titre du film:

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 123


h(titre)=rang(titre[0]) mod 5

Titre Année Juassic Park 2014


Twin Peaks 1999
Juassic Park
Annie Hall
2014
2015
0 Esay Rider 1977
Brasil 2000 Annie Hall 2015
Manhattan 2001 Underground 1989
Impitoyable 2008 1 Psychose 2020
Twin Peaks 1999
Underground 1989 Brasil 2000
Vertigo 2000
Esay Rider
Psychose
1977
2020
2 Greystoke 1988
Vertigo 2000 Manhattan 2001
Greystoke 1988 Metropolis 1978
Metropolis
Shining
1978
2001 3 Casablanca 2004
Reservoir 2018
Smoke 2003
Casablanca 2004 Impitoyable 2008
Reservoir 2018 Shining 2001
4 Smoke 2003
select * Insert into film values (Citizen Kane, 2010)
from Film Insert into film values (Miracle, 1987
where titre='Impitoyable' h('Citizen Kane’)=3
h('Impitoyable’)=4 h(Miracle)=3

Juassic Park 2014


0 Twin Peaks
Esay Rider
1999
1977
Annie Hall 2015
1 Underground
Psychose
1989
2020
Brasil 2000
2 Vertigo
Greystoke
2000
1988
Manhattan 2001 Citizen Kane 2010
Metropolis 1978 Miracle 1987
3 Casablanca 2004
Reservoir 2018
Impitoyable 2008
4 Shining
Smoke
2001
2003
L’indexation par hachage ne permet pas d’optimiser les recherches par intervalle,
puisque l’organisation des enregistrements ne s’appuie pas sur le tri des clés.
La requête suivante par exemple ne peut être résolue que par le parcours de tous les
blocs de la structure

select *from Film


where titre between 'Annie Hall' and 'Easy Rider'

Conclusion;

 Index Arbre_B: Utiliser pour toutes les conditions de sélection (égalité,


inégalité ou intervalle.
 Index bitmap: Efficace que l’arbre-B dans le cas des attributs à faible
cardinalités
 Index de Hachage: Efficace seulement pour les sélection avec égalité. Et
nécessite le partitionnement pour les grandes tables.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 126


L’optimisation : Les algorithmes de jointure

La jointure est l’opération la plus couteuse le choix de l’algorithme qui va


permettre la jointure entre deux ou plusieurs table est primordiale pour optimiser
les requêtes. Plusieurs algorithmes peuvent être utilisés selon le mode d’accès
aux données des attributs utilisés dans la jointure. Les principaux algorithmes
sont :
 Boucles imbriquées simples
 Tri-fusion
 Jointure par hachage
 Boucles imbriquées avec index

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 127


L’optimisation : Jointure avec boucles imbriquées

Une jointure par boucles imbriquées implique les étapes de base suivantes :
1. L'optimiseur détermine la source de ligne de pilotage et la désigne comme
boucle externe. La boucle externe produit un ensemble de lignes pour piloter la
condition de jointure. 
2. L'optimiseur désigne l'autre source de ligne comme boucle interne.

Algorithme boucles-imbriquées
Entrées: tables R, S
Sortie: table de jointure J
début
J=⌽
pour chaque r dans R répéter
pour chaque s dans S répéter
si r joignable à s alors J := J U {r ⨝ s}
fin répéter
fin répéter
fin

128
R ⋈ S
R.A=S.B

On suppose :
- Dans le Disque : Les n-uplets de R sont stockés dans NR pages et ceux de S dans NS
pages
- Dans la Mémoire : 1 pages pour charger les n-uplets de R et 1 pages pour S.
Pour chaque page de R on lit toutes les pages de S et on fait la jointure page par page
entre les articles. S est lue donc NR fois et R une seule fois
 
Par conséquent le coût est :

Conclusion :
La jointure par boucles imbriquées n’est efficace que le cas on a de petites tables
pilotes.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 129


Exemple1 :
Liste des salles du cinéma id=12
select * from cinema, salle
where cinema.idcinema=salle.idcinema
and cinema.idcinema = 12;
 
Le plan d’action est donné ci-dessous

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 130


L’optimisation : Jointure avec boucles imbriquées avec index
Ce le type de jointure de boucles imbriqué le plus courant puisque dans la plupart des
cas on réalise, dans une requête SQL, une jointure entre une clé primaire qui est
indexée par le SGBD et une clé étrangère.

Algorithme boucles-imbriquées
Entrées: tables R, S
Sortie: table de jointure J
début
J=⌽
pour chaque r dans R répéter
pour chaque s dans IndexS.B(r.A) répéter
si r joignable à s alors J := J U {r ⨝ s}
fin répéter
fin répéter
fin

131
Exemple : soit le schéma suivant :
Film (IDfilm, réalisateur, année)
Séance (IDsalle, IDfilm, heuredébut)

Nous cherchons à connaitre les salles de chaque cinéma.


select * from cinema, salle
where cinema.idcinema=salle.idcinema;
 
le plan d’exécution est donné par la figure suivante :

Conclusion :
La jointure par boucles imbriquées indéxé n’est efficace que le cas on a de petites
tables pilotes.
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 132
L’optimisation : Jointure de hachage
La jointure de hachage est le choix préférable des optimiseurs lorsque les tables de
jointure sont de grande taille. Ce type de jointure est valable seulement pour les
jointures d’égalité.
Phase de construction: L’optimiseur utilise la plus petite des deux tables de jointure
pour construire une table de Hachage en mémoire

Phase de sonde: Une fois la table de hachage construite, l’optimiseur scanne la plus


grande table. Pour chaque ligne de cette table, il recherche les lignes jointe de la
relation de construction en consultant la table de hachage, c’est la phase de sonde
Une table de hachage est une structure de données non ordonnée qui peut mapper des
clés à des valeurs à l’aide d’une fonction de hachage.
Lors de la construction de la table de hachage, si la taille de cette dernière dépasse
la taille maximale de la mémoire, l’optimiseur :
1. interrompe cette construction,
2. sonde l’autre table pour
3. ajouter les tuples de jointure,
4. Réinitialise la table de hachage puis continue à analyser l'entrée de construction
de la petite table. 133
SELECT * FROM cinema, salle
WHERE cinema.idcinema=salle.idcinema
AND cinema.nom like ‘M%’

IDcinema nom Adresse Hash Table : In-Memory


Hach(Idcinema) Cinéma
Cine_1 Miltiplex 52, av B
WHERE nom like ‘M%’
Indice-1 Cine_5 Miltiplex 52, av B
Cine_2 Megarama 35, Bd G

Cine_3 Atlas 48, Av Z Cine_3 Atlas 48, Av Z

Cine_4 Paris 21, Av 8 Phase Construction


Indice-2 Cine_2 Atlas 48, Av Z
Cine_5 Dawliz 25, Rue C

Cine_6 Marhaba 44, Av Y Indice-3


Cine_6 Atlas 48, Av Z

IDSalle Capacite IDcinema


Indice-4 Cine_4 Atlas 48, Av Z
S1 145 Cine_1
Cine_1 Atlas 48, Av Z
S2 544 Cine_2

S3 54 Cine_2
Phase Sonde
S4 541 Cine_1

S5 125 Cine_3
𝜎 𝑛𝑜𝑚 𝑙𝑖𝑘𝑒 𝑀 % ( 𝐶𝑖𝑛𝑒𝑚𝑎 ) ⋈ 𝑆𝑎𝑙𝑙𝑒
Cine_1 Atlas 48, Av Z S1 145 Cine_1
S6 123 Cine_4
Cine_2 Atlas 48, Av Z S2 544 Cine_2
S7 56 Cine_5
Cine_2 Atlas 48, Av Z S3 54 Cine_2
S8 147 Cine_5
Cine_1 Atlas 48, Av Z S4 541 Cine_1
S9 100 Cine_4
Cine_6 Atlas 48, Av Z S10 120 Cine_6
S10 120 Cine_6
SELECT * FROM cinema, salle
WHERE cinema.idcinema=salle.idcinema
AND cinema.nom like ‘M%’

Calcul du coût
On suppose que :
- Dans le Disque : Les n-uplets de R sont stockés dans NR pages et ceux de S
dans NS pages
- Dans la Mémoire : K pages pour charger les n-uplets de R pour construire la
table de hachage.
Conclusion :
Par conséquent le coût est : . Si tous les n-uplets de R peuvent être charger dans la
Lamémoire
Jointurelepar hachage
coût est plus
de réduit à efficace que la jointure par boucles imbriquées dans le
cas où les deux tables sont de grande taille.
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 135
L’inconvénient du hachage c’est qu’il n’est appliqué que pour la jointure avec égalité
début
Tantque (r dans R ET taille_TH<taille_M)
inserer(TH, r, FH(R.A))
Fin Tantque
tantque taille_TH > taille_TM
pour chaque s dans S répéter
i :=FH(R.B)
J := J U {TH(i) ⨝ s}
fin répéter
Tant que (r dans R ET taille_TH<TM)
répéter Réinitialisation de TH
inserer(TH, r, FH(R.A))
Fin Tantque
Fin Tantque
Entrées: tables R, S, TH
Si r n’est plus dans R Alors Sortie: table de jointure J (R.A = R.B)
pour chaque s dans S répéter inserer(TH, s, i): Procédure pour insérer dans
i :=FH(R.B) un tableau mémoire TH la structure s )
J := J U {TH(i) ⨝ s} FH : fonction de hachage
fin répéter taille_TH : taille table de hachage
FIN Si taille_M : Taille mémoire configurer
pour le hachage
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 136
On peut décrire cette algorithme de la manière suivante:

Tant qu’on c’est la fin de R et la taille de la table de hachage est inferieur à la


mémoire réservée. Ajouter le tuple r a la table de Hachage
tant que la taille de la table de hachage est égale à la mémoire réservée.
1. Scannez l'entrée de la table sonde et ajoutez des tuples de jointure
2. Réinitialiser la table de hachage et continuer à analyser l'entrée de
construction
Si on arrive à la fin du tableau
3. Scannez l'entrée de la table sonde et ajoutez des tuples de jointure
correspondants à la relation de sortie

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 137


L’optimisation : Les Vues Matérialisées

Les VM permettent de créer des vues physiques d’une table ou d’une requête SQL sur
un ensemble de table. La différence d’une vue standard c’est que les données sont
dupliquées.

Utilisé pour, des fins d’optimisation de performance,


- lorsqu’une requête demande l’exécution d’un ensemble de sous-requêtes,
- pour faire des réplications de table.

La « fraicheur » ou la mise à jour des données de la VM dépend des options choisies.


Le décalage entre les données de la table maître et la VM peut être nul
(rafraichissement synchrone) ou d’une durée planifiée : heure, jour,etc
(rafraichissement asynchrone) .

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 138


L’optimisation : Les Vues Matérialisées
Les méthodes de rafraichissement de la VM

Méthode FAST

FAST: mise-à-jour partielle de la copie locale. C’est la méthode la plus


efficace Pour réduire les coûts de réplication,

Lorsque des changements sont effectués sur les données d'une table
maître, Oracle stocke les lignes qui dérivent ces changements dans le
journal de vue matérialisée (fichier log), et utilise ensuite ces changements
dans le journal de vue matérialisé pour réactualiser les vues matérialisées
par rapport à la table maître. :

create materialized view log on Table_maitre;

(Disponible dans Oracle Enterprise Edition.)

139
L’optimisation : Les Vues Matérialisées
Les méthodes de rafraichissement de la VM
Méthode FAST

Un journal de vues matérialisées est un objet de schéma qui enregistre les


modifications apportées à une table de base afin qu'une vue matérialisée définie sur
la table de base puisse être actualisée de manière incrémentielle. 
Chaque journal de vues matérialisées est associé à une seule table de base. Le journal
des vues matérialisées réside dans la même base de données et le même schéma
que sa table de base.
create Materialized View Log on comptes with Rowid, Primary key;
Create Materialized View V1
Refresh Fast on Commit as
select idclient, count(idcompte) as nb
from comptes
where Solde>0
group by Idclient;
with Rowid, Primary key: inclure la colonne de clé primaire et le rowids de toutes les
lignes modifiées de la table de base dans un journal de vues matérialisées
140
L’optimisation : Les Vues Matérialisées
Les méthodes de rafraichissement de la VM
Méthode FAST

Un journal de vues matérialisées est un objet de schéma qui enregistre les


modifications apportées à une table de base afin qu'une vue matérialisée définie sur
la table de base puisse être actualisée de manière incrémentielle. 
Chaque journal de vues matérialisées est associé à une seule table de base. Le journal
des vues matérialisées réside dans la même base de données et le même schéma
que sa table de base.
create Materialized View Log on Table_name with Rowid, Primary key (liste
attributs) including new values;
with Rowid, Primary key: inclure la colonne de clé primaire et le rowids de toutes les
lignes modifiées de la table de base dans un journal de vues matérialisées

Liste Attributs: la liste des attributs de la table qui sont utilisés par la requêtes de la VM

Including new values: parmet à la BDD d’enregistrer, dans le journal des VMs, à la fois les
anciennes et les nouvelles valeurs pour les opérations de mise à jour LMD. concerne une table sur
laquelle vous disposez d'une vue agrégée matérialisée à table unique
141
L’optimisation : Les Vues Matérialisées
Les méthodes de rafraichissement de la VM
Méthode FAST

142
L’optimisation : Les Vues Matérialisées
Les méthodes de rafraichissement de la VM
Méthode FAST

Des conditions spécifiques doivent être vérifiées pour une actualisation


rapide. Ci-dessous quelques restrictions générales

• La vue matérialisée ne doit pas contenir de références à des expressions non


répétitives telles que SYSDATE.
• Il ne peut pas contenir de SELECT sous-requête de liste.
• Il ne peut pas contenir de HAVING clause avec une sous-requête.
• Il ne peut pas contenir des requêtes imbriquées qui ont NOT EXISTS.
• Il ne peut pas contenir de [START WITH …] CONNECT BY clause.
• Il ne peut pas contenir plusieurs tableaux détaillés sur différents sites.
• Les vues matérialisées imbriquées doivent avoir une jointure ou un agrégat.

143
Les méthodes de rafraichissement de la VM
Méthode FAST

Des conditions spécifiques doivent être vérifiées pour une actualisation


rapide. Ci-dessous quelques restrictions générales
Vues matérialisées avec des agrégats

 Toutes les tables de la vue matérialisée doivent avoir des journaux


de vue matérialisée, et ces journaux :
 Contient toutes les colonnes de la table référencée dans la vue matérialisée.
 Spécifiez avec ROWID et INCLUDING NEW VALUES.
 Spécifiez la SEQUENCE clause si la table doit contenir un mélange
 d'insertions/chargements directs, de suppressions et de mises à jour

 Pour chaque agrégat tel que SUM(exp) et AVG(expr), le correspondant 


COUNT(expr) doit être présent

144
Les méthodes de rafraichissement de la VM
Méthode FAST

Des conditions spécifiques doivent être vérifiées pour une actualisation


rapide. Ci-dessous quelques restrictions générales
Vues matérialisées avec des agrégats

 Si la vue matérialisée présente l'un des éléments suivants, l'actualisation


rapide n'est prise en charge que sur les insertions.
• Vues matérialisées avec MIN ou MAX agrégats
• Vues matérialisées qui n'ont SUM(expr) pas COUNT(expr)
• Vues matérialisées sans COUNT(*)

 La SELECT colonne de la requête de définition ne peut pas être


une expression complexe avec des colonnes de plusieurs tables de base. 
Une solution de contournement possible consiste à utiliser
une vue matérialisée imbriqué

145
L’optimisation : Les Vues Matérialisées

Les méthodes de rafraichissement de la VM

Méthode COMPLET

effectue le refresh complet en exécutant le SELECT de définition de la MV.

L'actualisation implique la relecture des tableaux détaillés pour recalculer les


résultats de la vue matérialisée. 

Cela peut être un processus très long, surtout s'il y a d'énormes quantités de
données à lire et à traiter. Par conséquent, on doit toujours tenir compte du
temps nécessaire pour traiter une actualisation complète avant de la demander.

Il existe des cas où la seule méthode d'actualisation disponible est l'actualisation


complète car la vue matérialisée ne satisfait pas aux conditions spécifiées ci-
dessous pour une actualisation rapide

146
L’optimisation : Les Vues Matérialisées

Les méthodes de rafraichissement de la VM

Méthode FORCE

C’est la méthode par défaut. Cette méthode effectue dans un premier temps une
actualisation rapide (FAST). Si cette dernière échoue, une actualisation complète se
produira.

147
L’optimisation : Les Vues Matérialisées

Les méthodes de rafraichissement de la VM


Vérification de la méthode de rafraichissement sur une VM :
Oracle dispose de la procédure dbms_Mview.explain_Mview(‘NomVM’) qui
permet de vérifier la méthode d’actualisation appliquée sur une VM déjà créé.

create table MV_CAPABILITIES_TABLE begin


( dbms_Mview.explain_Mview(‘VM’);
statement_id varchar(30) , end;
mvowner varchar(30) ,
mvname varchar(30) ,
capability_name varchar(30) ,
possible character(1) ,
related_text varchar(2000) ,
related_num number ,
msgno integer ,
msgtxt varchar(2000) ,
seq number
) ;
148
L’optimisation : Les Vues Matérialisées

Les modes de rafraichissement de la VM

ON COMMIT: rafraîchissement lorsqu’une transaction modifiant les tables


maîtresses fait un commit. Ce mode de rafraichissement est utilisé que si la table
maître est dans la même base de données où on a créé la vue matérialisée. Par
conséquent le mode « on commit » n'est pas pris en charge dans les bases de données
distantes.
 
ON DEMAND (par défaut): C’est un rafraîchissement sur demande de l’usager ou à
un instant qui peut être spécifié avec les clauses START et NEXT. Ce mode est utilisé
dans le cas des VM qui utilisent des tables maitresses distantes.
L’actualisation peut être effectuée avec les méthodes d'actualisation fournies dans le
DBMS_MVIEW packages
Begin
DBMS_MVIEW.REFRESH(‘NomVM’); //Actualisez une ou plusieurs VM.
DBMS_MVIEW.REFRESH_ALL_MVIEWS; //Actualisez toutes les VM.
END;
149
Plan d’Exécution d’ORACLE
Pour chaque requête SQL, Oracle permet d’afficher le plan d’exécution choisi par
l’optimiseur. On observe ainsi toutes les opérations faites par le moteur de requête. 

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 150


Plan d’Exécution d’ORACLE

 Cost est un indicateur de coût de calcul de la requête à ce stade. Cet indicateur est


une synthèse estimée des différents coûts (accès disque, CPU, etc.). Cet indicateur
est sans unité puisqu’il ne sert qu'à comparer différents plans entre eux.
 Cardinality est une estimation a priori du nombre de lignes remontées par la
requête à ce stade
 Operation : Le nom de l’opération que peut effectuer l’optimiseur pour joindre les
tables (ex : ‘NESTED LOOPS’, ‘HASH JOIN’ ou MERGE JOIN).
 Option : représente le mode pour accéder aux objets consultés. On note les modes
o Table Access FULL : Parcours séquentiel (balayage complet)
o Table Access by Rowid : Accès direct par adresse
o Index (Inique|Range|…) Scan : Accès par index
o Table Access Hash : Accès par hachage
o Table Access Cluster : Accès par cluster

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 151


Chapitre-III

PL/SQL

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 152


PL/SQL
Le langage SQL n’est pas un SQL est intégrée dans un langage
langage de programmation de programmation Externe
généraliste comme C, C++, Java,
PHP, etc….
SQL est un langage
orienté principalement vers
les opérations de Oracle propose la création des
recherche de données procédures écrites avec le
dans une base langage procédurale PLSQL
volumineuse d’une façon s’exécutant au sein du SGBD
simple et efficace.

Eviter les échanges réseaux qui sont


nécessaires quand les mêmes
fonctionnalités sont implantées dans
un programme externe communiquant
en mode client/serveur avec la base de
données.
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 153
PL/SQL
Introduction

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 154


PL/SQL
Introduction

 PLSQL est un langage de requête procédurale


 une extension de SQL permettant d’introduire de la
programmation dans les requêtes
 Représente une alternative à l’écriture de programmes avec
une langage de programmation externe généraliste (C, Java,
PHP ….

https://
coursbenmakhlouf.me.
A.Benmakhlouf 155 ma/
PL/SQL
Avantage
 Intégration du SQL : des instructions du DML, du contrôle de
transaction et des fonctions SQL utilisées avec pratiquement la
même syntaxe.
 Traitements procéduraux : L’utilisation des variables et des
structures de contrôle (test, boucles) permettant d’accroitre les
possibilités de gestion des données.
 Fonctionnalités supplémentaires : l’utilisation des curseurs et
le traitement des erreurs offrant de nouvelles possibilités de
traitements .  
 Amélioration des performances : plusieurs instructions sont
regroupées dans un bloc qui ne génèrera qu’un seule accès à la
base . 
 Incorporation aux produits ORACLE : les blocs ou procédures
PL/SQL sont compilés et exécutés par le  moteur PL/SQL . Ce
moteur est directement intégré à la base ORACLE  et à certains
outils tels que SQL Developper.
PL/SQL
Introduction

Moteur PL/SQL
Exécution des
Procédure instructions
Bloc BL/SQL procédurale
SQL

Moteur SQL

Exécution des
instructions SQL

https://
coursbenmakhlouf.me.
A.Benmakhlouf 157 ma/
PL/SQL
Structure et Syntaxe
La syntaxe du PLSQL est composée de celle de SQL plus :
1. Variables et constantes
2. Traitements conditionnels
3. Traitements itératifs
4. Curseurs en PL/SQL
5. Les enregistrements et les tables PL/SQL
6. Procédures
7. Fonctions
8. Les packages
9. Le traitement des exceptions (erreurs) https://
coursbenmakhlouf.me.
A.Benmakhlouf 158 ma/
PL/SQL
Structure et Syntaxe
DECLARE
Variables;
Constantes;
Curseurs;
Tables PL/SQL;
Enregistrements PL/SQL;
Exceptions;
BEGIN
Instructions SQL et PL/SQL
EXCEPTION
Traitement des exceptions (gestion des erreurs)
https://
END coursbenmakhlouf.me.
A.Benmakhlouf 159 ma/
PL/SQL
Structure et Syntaxe

 Chaque instruction se termine par ‘;’


 Les parties ‘DECLARE’ et ‘EXCEPTION’ sont facultatives
 On peut inclure des commentaires dans un bloc PL/SQL
en utilisant:
 -- commentaires sur une seule ligne
 /* ………*/ commentaires sur plusieurs lignes.

https://
coursbenmakhlouf.me.
A.Benmakhlouf 160 ma/
PL/SQL
Les Variables

Un moyen pour mettre en mémoire une valeur d’un certain type.

Caractérisée par un nom, une adresse mémoire et une valeur.

`NomVariable` doit être différent de :


 Nom d’attribut
 Nom de table

L’affectation «  » se fait grâce à « := » ou « DEFAULT »

https://
coursbenmakhlouf.me.
A.Benmakhlouf 161 ma/
PL/SQL
Les Variables

Dans PLSQL on peut utiliser trois types de variables :


I- Variables de type Oracle :
Char, Varchar2, Number, Date, Long, Integer, float
 
II- Variables de type booléens :
BOOLEAN

DECLARE
X Number(2, 0) := 12;
Y varchar2(10) := ‘Ordinateur’;
BEGIN
….
….
END

A.Benmakhlouf 162 https://coursbenmakhlouf.me.ma/


PL/SQL
Les Variables

Exemple: insérer les valeurs des variables dans les attributs d’une
ligne d’une tables

DECLARE
v_Réf Number(2, 0) := 16;
v_Nom varchar2(10) := 'Ordinateur';
v_PU Number(6, 2) := 356.12;
v_Stk Number(3, 0) := 254;
BEGIN
INSERT into PRODUIT(réf, Nom, PU, Stk)
VALUES (v_Réf, v_Nom, v_PU, v_Stk);
END;

A.Benmakhlouf 163 https://coursbenmakhlouf.me.ma/


PL/SQL
Les Variables

III- Variables faisant référence au dictionnaire de données.

On peut définir de nouveau type de variables qui font


référence à la structure d’une table de la BDD.
On utilise la close « %TYPE ».

III-1- Variables de même type qu’un attribut d’une table :

Syntaxe:

DECLARE
NomVariable Nomtable.NomAttribut%TYPE;
….
BEGIN
……
A.Benmakhlouf 164 https://coursbenmakhlouf.me.ma/
PL/SQL
Les Variables

Exemple:
Mettre en mémoire les valeurs d’un tuple de la table PRODUIT:
SET SERVEROUTPUT ON
DECLARE
v_Réf PRODUIT.RÉF%TYPE;
v_Nom Produit.Nom%TYPE;
v_PU Produit.PU%TYPE;
v_Stk Produit.Stk%TYPE;
BEGIN
SELECT Réf, Nom, PU, Stk INTO v_Réf, v_Nom, v_PU, v_Stk
FROM PRODUIT
WHERE "RÉF"=16;
DBMS_OUTPUT.PUT_LINE('Ref Produit : '||v_Réf);
DBMS_OUTPUT.PUT_LINE('Nom Produit : '||v_Nom);
DBMS_OUTPUT.PUT_LINE('Prix : '||v_PU);
DBMS_OUTPUT.PUT_LINE('Stock : '||v_Stk);
END;
A.Benmakhlouf 165 https://coursbenmakhlouf.me.ma/
PL/SQL
Les Variables

III- Variables faisant référence au dictionnaire de données.

III-1- Variables de même type d’un n-uplet d’une table

Syntaxe:
DECLARE
NomVariable Nomtable%ROWTYPE;
….;
BEGIN
…..
END

Pour accéder à un attribut on écrit :


 
Variable.NomAttribut ;

A.Benmakhlouf 166 https://coursbenmakhlouf.me.ma/


PL/SQL
Les Variables composées : Les Collections et les enregistrements

Pour Stocker en mémoire des colonnes ou des lignes de données Oracle et de les
faire passer en tant que paramètres de fonctions ou de procédures PL/SQL

Pour Faciliter le déplacement des collections de données dans et hors des tables
de base de données ou entre les applications côté client et les sous-programmes
stockés,

On Utilise des
Tables,
Enregistrements
Tables d’enregistrement

A.Benmakhlouf 167 https://coursbenmakhlouf.me.ma/


PL/SQL
Les Variables composées : Les Collections et les enregistrements

Les Collections ou Tables


Une table PL / SQL est une collection ordonnée d'éléments du même type. 
PLSQL Propose trois types de table:

Les tables d’indexation : qui peuvent être indexés par des valeurs
numériques ou alphanumériques.

Les tables imbriquées: qui sont indexés par des variables numériques.
Ils peuvent être stocké dans une colonne de la BDD.

Les tables Varray: indexés par des variables numériques, dont le nombre
d'éléments maximum est fixé dès leur déclaration et Ils peuvent être
stocké dans une colonne de la BDD.

A.Benmakhlouf 168 https://coursbenmakhlouf.me.ma/


PL/SQL
Les Variables composées : Les Collections et les enregistrements

Les tables imbriquées


Les tables imbriquées et Varray sont utilisées dans la Gestion d'attribut
multivalué par imbrication de collection de scalaires (BDD Relationnel-
Objet)

Nom Prénom Tel


BERRADA Ali 0522558899
0657448899
0577889955
MOURTADA Karim 0254488559
0288499566
0259599558

A.Benmakhlouf 169 https://coursbenmakhlouf.me.ma/


PL/SQL
Les Variables composées : Les Collections et les enregistrements

Les tables imbriquées


Chaque élément a un numéro d'index unique qui détermine sa position dans
la collection ordonnée. 

Les Tables imbriquées doivent être initialisée et doivent être étendues pour
ajouter un élément.

L’indexation ne peut se faire par des index numériques (à partie de 1).

Les éléments du tableau peuvent avoir le type des champs de la BDD

A.Benmakhlouf 170 https://coursbenmakhlouf.me.ma/


PL/SQL
Les Variables composées : Les Collections et les enregistrements

Les tables imbriquées


L’accès à un élément de la table s’effectue grâce à un indice.

-- Déclaration du type de l’élément de la table :


TYPE nom_Type IS TABLE OF type_valeur;
 
--Déclaration et initialisation de la variable de type table :
nom-variable nom_Type : = nom_Type();

-- Extension du tableau avant chaque ajout d’élement


nom-variable.Extend

A.Benmakhlouf 171 https://coursbenmakhlouf.me.ma/


PL/SQL
Les Variables composées : Les Collections et les enregistrements

Les Tables d’indexation


une table PL / SQL est une collection ordonnée d'éléments du même type. 
 Chaque élément a un numéro d'index unique qui détermine sa position
dans la collection ordonnée. 

 L’indexation peut se faire par des index significatifs. Pas obligé


d’indexer par des numéros consécutifs. 

 la taille en mémoire d'une table PL / SQL peut augmenter


dynamiquement.

 Les éléments du tableau peuvent avoir le type des champs de la BDD

 Elle ne peut avoir qu'une seule dimension (mais en créant des


collections de collections on peut obtenir des tableaux à plusieurs
dimensions)
A.Benmakhlouf 172 https://coursbenmakhlouf.me.ma/
PL/SQL
Les Variables composées : Les Collections et les enregistrements

Les Collections ou Tables


L’accès à un élément de la table s’effectue grâce à un indice. Cet indice est
déclaré de type INTEGER ou STRING. La déclaration se fait en deux
étapes :

Déclaration du type de l’élément de la table :


 
TYPE nom_Type IS TABLE OF type_valeur
INDEX BY BINARY_INTEGER;
 
Déclaration de la variable de type table :

nom-variable nom_Type;

A.Benmakhlouf 173 https://coursbenmakhlouf.me.ma/


PL/SQL
Les Variables composées : Les Collections et les enregistrements

Les Collections ou Tables


set Serveroutput on;
declare
type tab is table of float
Index by Varchar2(20);
PU tab;
begin
PU('Produit1'):=12.5;
PU('Produit2'):=13.9;
dbms_Output.Put_Line(PU('Produit1'));
end;

A.Benmakhlouf 174 https://coursbenmakhlouf.me.ma/


PL/SQL
Les Variables composées : Les Collections et les enregistrements

Les Collections ou Tables


set Serveroutput on;
declare
type tab is table of Varchar2(20)
Index by Varchar2(4);
Emp tab;
begin
Emp('LC31'):='BERRADA Ahmed';
Emp('BE37'):='ALAOUI Khalid';
Emp('AX98'):='KARIMI Lamiaa';
Emp('BY45'):='YASSINE Anas';
dbms_Output.Put_Line(Emp('BE37'));
end;

A.Benmakhlouf 175 https://coursbenmakhlouf.me.ma/


PL/SQL
Les Variables composées : Les Tables et les enregistrements
Les Tables
Exemple1 : SET SERVEROUTPUT ON
DECLARE
Stocker en mémoire dans un tableau les noms des sociétés des clients
TYPE TableCode is TABLE of VARCHAR2(100)
dont le codeclient est « BONAP » et « COMMI ».
index by BINARY_INTEGER;
T TableCode;
i number(1,0) :=0;
BEGIN
select "SOCIÉTÉ" into T(i)
from CLIENTS
where CODECLIENT = 'BONAP';
DBMS_OUTPUT.PUT_LINE(T(i));
i:=i+1;
select "SOCIÉTÉ" into T(i)
from CLIENTS
where CODECLIENT = 'COMMI';
DBMS_OUTPUT.PUT_LINE(T(i));
END;
A.Benmakhlouf 176 https://coursbenmakhlouf.me.ma/
PL/SQL
Les Variables composées : Les Tables et les enregistrements

Les enregistrements (RECORD)


permet de stocker en mémoire, sous le même identificateur, un ensemble de
valeur de différents type :
 Par référence à une structure de table de BDD ou de curseur en utilisant
« ROWTYPE ».

TYPE nom_type IS RECORD (


nom-Var nom_table%ROWTYPE;...);

 Par énumération des rubriques (champs) qui la composent.

TYPE nom_type IS RECORD ( Déclaration de la variable de type


nom-champ1 Table.attribut1%type, enregistrement
nom-champ2 Table.attribut2%type,
...); nom-variable nom_type;

A.Benmakhlouf 177 https://coursbenmakhlouf.me.ma/


PL/SQL
Les Variables composées : Les Tables et les enregistrements

Les enregistrements (RECORD)


Stocker en mémoire dans un enregistrement les valeurs des attributs CODECLIENT,
SOCETE, FONCTION de la table clients dont le codeclient=’BONNAP’

SET SERVEROUTPUT ON
DECLARE
TYPE Str is RECORD
(Code Clients.CODECLIENT%TYPE,
Nom CLIENTS."SOCIÉTÉ"%type,
Fonc CLIENTS.FONCTION%type);
P Str;
BEGIN
select CODECLIENT, société, Fonction into P
from CLIENTS
where Codeclient='BONAP';
DBMS_OUTPUT.PUT_LINE(P.code||' '||P.Nom||' '||P.Fonc);
END;
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 178
PL/SQL
Les Variables composées : Les Tables et les enregistrements

Les enregistrements (RECORD)


Stocker en mémoire dans un enregistrement le n-uplet de la table clients dont
le codeclient=’BONAP’

SET
SET SERVEROUTPUT
SERVEROUTPUT ON
ON
DECLARE
DECLARE
CLTYPE Str is RECORD
Clients%rowtype;
BEGIN(CL Clients%rowtype);
P Str;* into CL
select
BEGIN
from CLIENTS
selectCodeclient='BONAP';
where * into P.CL (le member de P est un enregistrement)
from CLIENTS
DBMS_OUTPUT.PUT_LINE(CL.CODECLIENT||' '||CL.SOCIéTé||' '||
where Codeclient='BONAP';
CL.FONCTION);
DBMS_OUTPUT.PUT_LINE(P.CL.CODECLIENT||' '||P.CL.SOCIéTé||' '||
END;
P.CL.FONCTION);
END;

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 179


PL/SQL
Les Structures de Contrôle alternatives (conditionnelles)

IF condition1 THEN
traitement1;
ELSIF condition2
THEN
traitement2;
[ELSE
traitement3;]
END IF;
Exercice:
Mettre en mémoire le codeclient, la société et le chiffre d’affaire CA du
client dont le code est ‘BONAP’. Puis accorder lui la commission suivante:

Si le CA < 1000 : 20% du CA


Si le CA est compris 1000 et 2000 : 30% du CA
Si le CA > 2000 : 40% du CA

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 180


PL/SQL
Les Structures de Contrôle itérative (Loop)

Syntaxe :

BEGIN

LOOP
Instructions;
EXIT [WHEN condition];
END LOOP;
END

Exercice:

Créer dans une base de données un tableau pour stocker une table de
multiplication d’un nombre dont la valeur va être saisie par l’utilisateur.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 181


PL/SQL
Les Structures de Contrôle itérative (While)
Syntaxe :

BEGIN

WHILE <condition>
LOOP
Instructions;
END LOOP;
….
END

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 182


PL/SQL
Les Structures de Contrôle itérative (For)
Syntaxe :

BEGIN

FOR indice IN [REVERSE] exp1..exp2
LOOP
Instructions;
END LOOP;
…..
END;

 Inutile de déclarer la variable ‘indice’


 Indice varie de exp1 à exp2 avec un pas de 1 (exp1<exp2)
 Si ‘REVERSE’ est précisé alors ‘indice’ varie de exp1 à exp2 avec un pas
de –1 (exp1>exp2)

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 183


PL/SQL
Les Curseurs

Permet de parcourir une par une les lignes récupérer par une requête de
sélection (SELECT).
Le fonctionnement d’un curseur se compose de quatre étapes.
 
1. Déclaration du curseur avec sa requête SELECT
2. L’ouverture du curseur
3. Récupération des lignes une à une, en commençant par la première
4. Fermeture du curseur

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 184


PL/SQL
Les Curseurs

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 185


PL/SQL
Les Curseurs

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 186


PL/SQL
Les Curseurs
 

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 187


PL/SQL
Les Curseurs
 
Traitement de lignes :
Les lignes ramenées sont traitées une
par une, la valeur de chaque colonne
du SELECT doit être stockée en
mémoire en utilisant une variable
réceptrice.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 188


PL/SQL
Les Curseurs

Non

Oui
Vide
DECLARE OPEN FETCH CLOSE

Déclarer le Rendre le Charger la Désactiver


curseur curseur actif ligne Tester si la le curseur
courante ligne est vide
dans la liste
des variables

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 189


PL/SQL
Les Curseurs

Exercice-1 :
Stocker maintenant en mémoire les valeurs de trois attributs dans un
tableau d’enregistrement PL/SQL puis afficher les

Exercice-2 :
Stocker maintenant en mémoire les valeurs de chaque tuple dans un
tableau d’enregistrement PL/SQL puis afficher trois attributs

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 190


PL/SQL
Les Procédures

• Une procédure est un bloc PL/SQL nommé et paramétré qui fait un


traitement.
• Une procédure peut être stockée dans la base de données.
• Une procédure peut être appelée et exécuter plusieurs fois en cas de
besoin.
• Une procédure stockée se compile et s’exécute au sein du SGBD, ce qui
évite les échanges Client/serveur.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 191


Client Serveur Web Serveur de BDD
Wamp/ Oracle
Envoi Rq Xamp/ Envoi de Acc
Chrome, ès
HTTP EasyPHP
PHP + SQL Rq SQL Exécution
FireFox, BDD
… Compilation des
de PHP Requêtes t ion
Affiche SQL t r ac
Requête Exécution de Résultat Ex
http Résultat
PHP

Client Serveur Web Serveur de BDD


Wamp/ Oracle Acc
Envoi Rq ès
Chrome, Xamp/ Compilation
HTTP
FireFox, EasyPHP Nom PS puis Exécution BDD
… Appel de la de la
n
Procédure Procédure ctio
Affiche tra
Requête Résultat stockée PLSQL Ex
http Résultat

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 192


PL/SQL
Les Procédures

Syntaxe :
CREATE [OR REPLACE] PROCEDURE nom_proc
(param1 [type][mode] type_donnée,
param2 [type][mode] type_donnée,
….)
IS
Bloc PL/SQL

Exemple1 : créer une procédure qui permet d’afficher le nombre de commande


réalisé pendant une année qui sera transmise en paramétrer.

Exemple2: créer une procédure qui permet d’insérer une ligne dans une table :
PRODUIT(REFPRODUIT, NOMPRODUIT, PRIX, STOCK).

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 193


PL/SQL
Les Fonctions

Ce sont aussi des Bloc PL/SQL stockés dans la BDD comme un objet
nommé et paramétré.
Mais la particularité des fonctions c’est qu’elle revoie une valeur
(RETURN).

Exemple : créer une fonction qui permet de renvoyer le nombre de commande


réalisé pendant une année qui sera transmise en paramétrer.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 194


PL/SQL
Les Paramètres dans Procédures et fonctions

Les fonctions et les procédures sont paramétrable afin de faciliter leur utilisation
Trois types de paramètres peuvent être utilisés dans PLSQL :

 IN : Paramètre d’entré
 OUT : Paramètre de Sortie
 IN OUT : Paramètre d’entré-Sortie

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 195


PL/SQL
Les Paramètres dans Procédures et fonctions

Type de transmission (IN, OUT, IN OUT)

IN : (valeur par défaut) indique que le paramètre transmis par le programme
appelant n'est pas modifiable par la procédure.
OUT : indique que le paramètre est modifiable par la procédure.
IN OUT :  indique que le paramètre est transmis par le programme appelant et
modifier par la procédure.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 196


PL/SQL
Les Paramètres dans Procédures et fonctions

Mode de transmission (par valeur ou par référence)

Passage par valeur : c’est le mode par défaut:


1. un tampon temporaire est créé (paramètre formel) pour stocker la valeur transmise
2. La procédure traite cette valeur en la modifiant.
3. Une fois la procédure terminée, le contenu du tampon temporaire est recopié dans
le paramètre réel
Récupération de la valeur transmise à une procédure même si on fait un
passage par valeur.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 197


PL/SQL
Les Paramètres dans Procédures et fonctions

Mode de transmission (par valeur ou par référence)


Passage par Référence : l'utilisation de l'indicateur NOCOPY indique au
compilateur d'utiliser le passage par référence. Dans ce cas c’est l’adresse mémoire de
la donnée qui est transmise et toute modification des valeurs de paramètre est écrite
directement dans la variable de paramètre (paramètre réel).

Dans de manipulation des données volumineux ou complexes le passage par


référence reste optimal.

 La passage par valeur nécessite deux fois la mémoire (Création du tampon


temporaire)
 la copie des données dans le tampon temporaire et les retourner dans la
variable de paramètre demande un temps considérable.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 198


PL/SQL
Les Paramètres dans Les Procédures et fonctions

Exemple : Ecrire une procédure qui permet de calculer la réduction accordée à un client
donné. Cette réduction est accordée en fonction du chiffre d’affaire (CA). Elle est de 0% du
CA si ce dernier est inferieur à 1000. De 20% si 1000<CA<=10000 et 30% si CA>10000. Le
CA et la réduction RD seront des paramètres de la procédure. Appeler cette procédure dans
une programme PLSQL.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 199


PL/SQL
Les Packages

C’est un ensemble de procédures, de fonctions, de variables, de constantes,


de curseurs et d’exceptions stockés dans la base de données Oracle.

Un package est conçu en deux parties 

1. Spécification : C’est la partie déclaration de tous les composants du


package : les procédures, les fonctions, les variables, etc….

2. Corps du package : c’est la partie où on définit les procédures, les


fonctions, les variables, les constantes, les curseurs et les exceptions du
package.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 200


PL/SQL
Les Packages

Syntaxe :

CREATE [OR REPLACE] PACKAGE nom_package IS


Section declaration;
END;

CREATE PACKAGE BODY nom_package IS


Corps des procédures;
Corps des fonctions;
Déclaration des variables;
Déclaration des constantes;
Corps des curseurs;
Déclaration des exceptions;
END;

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 201


PL/SQL
Les Packages

Exemple :
Créer un package contenant :
1. Une procédure qui permet d’afficher le chiffre d’affaire par année
2. Une fonction qui permet de renvoyer le chiffre d’affaire réalisé
pendant une année qui sera transmise en argument.
3. Un curseur qui permet de parcourir les ligne de la requête
« select » qui calcule le CA par année.
4. Deux variables globales pour stocker en mémoire le CA et
l’année.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 202


PL/SQL
Les Packages

Passage d’une table de données en paramètre d’une procédure stockées

Exemple-2 :

Ecrire une procédure stockée qui permet d’afficher les valeurs d’une table de
données. Cette dernière sera transmise en paramètre ainsi que sa taille.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 203


PL/SQL
Les EXEPTIONS

• La section EXCEPTION permet de gérer les erreurs survenues lors de


l’exécution d’un bloc PL/SQL.

• Permet de tester le code et éviter de le quitter brusquement sans savoir


pourquoi.

• Lorsqu'une exception survient, un message expliquant sa cause est


reçu.

Il existe 2 types d'exceptions.

1. Exceptions du système nommé


2. Exceptions définies par l'utilisateur

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 204


PL/SQL
Les EXEPTIONS du système nommé
• Elles sont automatiquement déclenchées par Oracle lorsqu'un Numéro
Nom d’Exception Description
programme enfreint une règle de SGBDR. d’erreur
Lorsque vous ouvrez un curseur déjà
CURSOR_ALREADY_OPEN ORA-06511
ouvert.
• Elles sont donc prédéfinies et portent un nom dans Oracle
Lorsque vous effectuez une opération
non valide sur un curseur tel que la
INVALID_CURSOR fermeture d'un curseur, récupérer les ORA-01001
données d'un curseur qui n'est pas
ouvert.

Lorsqu’une clause SELECT... INTO ne


NO_DATA_FOUND ORA-01403
renvoie aucune ligne d'une table.

Lorsque vous sélectionnez ou


TOO_MANY_ROWS récupérez plusieurs lignes dans un ORA-01422
enregistrement ou une variable.

Lorsque vous essayez de diviser un


ZERO_DIVIDE ORA-01476
A.Benmakhlouf nombre par zéro.
https://coursbenmakhlouf.me.ma/ 205
PL/SQL
Les EXEPTIONS du système nommé
Syntaxe :
 
BEGIN
Execution section
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line ('SELECT..INTO did not return any row');
END;
Exercice1:
Créer un programme qui donne le nbre de commande réalisée
pendant une année donnée. Une exception doit être afficher si il n’y a
pas de vente cette année

Exercice2:
Créer une fonction qui renvoi le CA d’une année qui sera transmise en
paramètre. Cette fonction doit renvoyer 0 s’il n’y a pas de vente pendant
cette année,

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 206


PL/SQL
Les EXEPTIONS définies par l'utilisateur

La syntaxe générale PL/SQL est :


 

DECLARE
nom_erreur EXCEPTION;

BEGIN

IF condition THEN
RAISE nom_erreur; /* On déclenche l’erreur */

EXCEPTION
WHEN nom_erreur THEN
traitement de l’erreur;
[..]
END;

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 207


PL/SQL
Les EXEPTIONS définies par l'utilisateur

Exercice :

créer un programme qui calcule la quantité totale vendue (QT) de chaque


produit. Une exception doit être gérée dans le cas où on trouve un produit
dont la QT est supérieure à une quantité limite. Si c’est le cas un message
doit d’afficher « Produit à quantité énorme » suivi d’un message d’erreur. Si
non on affiche tous les produits avec leur QT.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 208


PL/SQL
Les EXEPTIONS

La Procédure RAISE_APPLICATION_ERROR ( )

• Procédure intégrée à Oracle


• Permet d'afficher les messages d'erreur définis par l'utilisateur
• Permet d’affecter un numéro d'erreur dont la plage se situe entre -20000 et
-20999.
Avantage:
Si on fait appelle à cette procédure toutes les transactions précédentes qui ne sont
pas validées (commit) dans le bloc PL/SQL sont annulées automatiquement (c'est-
à-dire que les instructions INSERT, UPDATE ou DELETE).

La syntaxe générale est :
 
RAISE_APPLICATION_ERROR (error_number, error_message);

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 209


PL/SQL
Les EXEPTIONS

Exemple:

Créer un programme PL/SQL qui permet d’insérer une nouvelle ligne de commande
dans la table « détailsCommandes ». Une exception doit annuler l’insertion et
affiche un message d’erreur « Quantité insuffisante » si la Quantité saisie est < 2.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 210


PL/SQL
Les Déclencheurs (Triggers)

Un trigger est une fonction qui doit être exécutée Avant ou après les
opérations INSERT, UPDATE, DELETE (BEFORE, AFTER).

la clause FOR EACH ROW applique le déclenchement pour chaque


enregistrement.

« :OLD » sont des variables (des enregistrements) qui donnent accès à la


valeur avant la mise à jour (UPDATE). Dans le cas de l’insertion cette valeur
est NULL.

« :NEW » sont des variables (des enregistrements) qui donnent accès à la


valeur après la mise à jour (UPDATE). Dans le cas de la suppression cette
valeur est NULL.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 211


PL/SQL
Les Déclencheurs (Triggers)

Un trigger est une fonction compilée et stockée dans la BDD qui doit être
exécutée Avant ou après les opérations INSERT, UPDATE, DELETE
(BEFORE, AFTER).

la clause FOR EACH ROW applique le déclenchement pour chaque


enregistrement.

« :OLD » sont des variables (des enregistrements) qui donnent accès à la


valeur avant la mise à jour (UPDATE). Dans le cas de l’insertion cette valeur
est NULL.

« :NEW » sont des variables (des enregistrements) qui donnent accès à la


valeur après la mise à jour (UPDATE). Dans le cas de la suppression cette
valeur est NULL.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 212


PL/SQL
Les Déclencheurs (Triggers)

Il est possible de contrôler les conditions d'exécution avec des clauses

IF INSERTING THEN
...
ELSIF UPDATING THEN
...
ELSIF DELETING THEN
...

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 213


PL/SQL
Les Déclencheurs (Triggers)

Syntaxe :

CREATE OR REPLACE TRIGGER nom_TRigger


BEFORE INSERT (Update) [DELETE] ON Table
for EACH ROW
BEGIN (debut de trigger)
declare
….
begin
……
end;
END (Fin Trigger);

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 214


PL/SQL
Les Déclencheurs (Triggers)

Exemple :

créer un trigger qui permet de vérifier la disponibilité d’un produit avant


l’insertion d’une nouvelle ligne de commande.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 215


Client(NoClient, NomClient, PrénomClient, VilleCLient, Age)
Agence(CodeAgence, NomAgence, Adresse, Ville)
Compte(IdCompte, NCompte, Solde, NoClient, CodeAgence)

BDD

BDD1
BDD2
BDD3

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 216


Problème d’Insertion de suppression et de mise à jour

 Ecriture automatique dans la BDD1 ou BDD2 ou BDD3

 Insertion des tuples dans les sous BDDs


 Insertion des tuples connexes

Exercice:

- Insérer les données dans la bdd1 des agence de ‘Casablanca’


- Création les triggers qui permettent d’insérer un nouveau compte
bancaire ainsi que les tuples connexes dans la BDD concerné en gardant
une copie dans la BDD centrale.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 217


Bases de Données Réparties

Mécanisme de gestion des BDRs


avec ORACLE

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 218


PLAN:

I. Besoins, Objectifs & Définitions

II. Conception d’une base de données répartie

III. Fragmentation
1. Type de fragmentation
2. Définition de la fragmentation

IV. Allocation

V. Traitement & Optimisation de Requêtes Réparties

VI.Mécanismes de Répartition avec Oracle

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 219


Bases de Données Réparties
Besoins & Objectifs
Problématiques
 besoin de plus en plus de gérer un volume important de données
 lourdeur dans la réalisation et l’exécuter à distance des différentes
transactions. Coût important dû au déplacement des données à partir de
BDD centrale.

 
Site n Site1
BDD
Centralisée


 Site2
Site… 
Site3
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 220
Bases de Données Réparties
Besoins & Objectifs
Solutions:
 Répartition des données d’une BDD dans plusieurs Sites
 Décentralisation des ressources d’une entreprise dans plusieurs
architecture client/serveur

 
Site1
Site n
BDD
Centrale


Site… 
Site2


A.Benmakhlouf Site3 221
Bases de Données Réparties
Besoins & Objectifs

 Une indépendance à la localisation : l’exploitation des données dans les


BDD indépendamment de la localisation des données.

 Une fiabilité élevée : les données dans une BDR sont souvent répliquées.
 minimiser le risque de perte des données lié à la centralisation.
 minimiser la vulnérabilité du réseau. la panne d’un site n’est pas très
importante pour l’utilisateur, qui s’adressera à autre site.

 Une Performance élevé: Le but de la répartition des données sur plusieurs


sites est de:
 rapprocher les données de l’endroit où elles sont souvent accédées.
 répartir la charge sur les processeurs et sur les entrées/ sorties.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 222


Bases de Données Réparties
 Conception d’une base de données répartie

En prenant en considération les critères techniques et organisationnels


L'administrateur doit minimiser:
 le nombre de transferts entre sites,
 les temps de transfert,
 le volume de données transférées,
 les temps moyens de traitement des requêtes
 le nombre de copies de fragments,

on peut par ailleurs distinguer deux méthodes de répartition :

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 223


Bases de Données Réparties
 Conception d’une base de données répartie
Conception descendante (top down design)

• Définition du schéma conceptuel global de la base de données


répartie,
• Définition des schémas conceptuels locaux et les distribuer sur les
différents sites

 La répartition se fait donc en deux étapes:


1. la fragmentation,
2. l’allocation de ces fragments aux sites.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 224


Bases de Données Réparties
 Conception d’une base de données répartie

Conception ascendante (bottom up design)

 regrouper les schémas conceptuels locaux dans un schéma


conceptuel global.
 Les données sont réparties dans des bases de données existantes et
on veut les intégrées dans une base de données centrale et globale.

Peut utilisé à cause de


Les BDD existantes sont hétérogènes et sont gérés par déférents SGBD. Pour faire il
faut uniformiser puis consolider les données des différents sites

- Identifier les données identiques


- Accorder leurs types
- Gérer leur cohérence…
- Interfacer ou adapter les SGBD…

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 225


Bases de Données Réparties
 Architecture d’une BDR

la répartition d'une base de données intervient dans les trois niveaux de son
architecture.
 
 Niveau externe : les vues sont distribuées sur les sites utilisateurs.

 Niveau conceptuel : le schéma conceptuel des données est associé aux


schémas locaux qui sont réparties sur plusieurs sites, les sites
physiques.

 Niveau interne : des schémas internes locaux répartis sur différents


sites.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 226


Bases de Données Réparties
 Fragmentation

La fragmentation est la décomposition d'une base de données en un


ensemble de sous-bases de données. Risque de perte d'informations.

Il y a deux règles principales pour assurer une fragmentation sans cette


perte de données.

1. La complétude : pour toute donnée d’une relation R, il existe un


fragment Ri de la relation R qui possède cette donnée.
2. La reconstruction : pour toute relation décomposée en un ensemble de
fragments Ri, il existe une opération de reconstruction.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 227


Bases de Données Réparties
 Fragmentation - Type de Fragmentation

- fragmentation par objet

 Répartition des objets dans les différents serveur objet par objet.
 Toutes Les occurrences d’une classe appartient ainsi au même
fragment.

 L’opération de fragmentation sera donc la définition des sous-schémas


 L’opération de recomposition des informations sera Les jointures entre
les objets des sous-schémas.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 228


Bases de Données Réparties
 Fragmentation - Type de Fragmentation
- fragmentation par objet

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 229


Bases de Données Réparties
 Fragmentation - Type de Fragmentation

- Fragmentation par occurrences (fragmentation horizontale FH)

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 230


Bases de Données Réparties
 Fragmentation - Type de Fragmentation

- fragmentation par attributs (fragmentation verticale FV)

 Les attributs de la même classe sont fragmentés dans plusieurs serveurs.


 toutes les valeurs des occurrences pour un même attribut se trouvent
dans le même fragment.
 Des attributs sont dupliqués dans les fragments pour assurer leurs
jointures.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 231


Bases de Données Réparties
 Fragmentation - Type de Fragmentation

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 232


Bases de Données Réparties
 Fragmentation - Type de Fragmentation

- fragmentation hybride (FHY)


 Seulement quelques valeurs des occurrences pour un même attribut
se trouvent dans le même fragment.
 C’est donc une combinaison entre la FH et la FV.

 L'opération de partitionnement est une combinaison de projections


et de sélections.
 L'opération de recomposition est une combinaison de jointures et
d'unions.
Fragmentation Reconstruction
R FH   FH
R1 R2 FV
FV ⋈ ⋈

R11 R21 R22


R12 R13 R11 R21 R22
A.Benmakhlouf R12
https://coursbenmakhlouf.me.ma/ R13 233
Bases de Données Réparties
 Fragmentation - Type de Fragmentation
 

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 234


Bases de Données Réparties
 Fragmentation - Type de Fragmentation

- fragmentation des occurrences connexes (fragmentation dérivée FD)


 

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 235


Bases de Données Réparties
 Fragmentation - Type de Fragmentation

- fragmentation des occurrences connexes (fragmentation dérivée FD)

Exercice

Implémenter dans un compte utilisateur Bank1 les fragments des


tables clients de Casablanca ainsi que leur comptes.

Bank1.clients :
 
Bank1.Comptes : Bank1.clients ⋉ comptes

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 236


Bases de Données Réparties
 Définition de la fragmentation
 La fragmentation se base sur l’ensemble des requêtes d’interrogation
ou de mise à jour les plus utilisées.

 Il faut extraire de ces requêtes toutes les conditions de sélection


élémentaires, les attributs de projection et les jointures.

• Les conditions de sélection sont à la base de la FH


• Les attributs de projections sont à la base de la FV
• Les jointures donnent une information sur la fragmentation par
objet.

 Une fragmentation doit respecter deux critères.

 Reconstitution : possibilité de reconstituer les BDD initiale.


 Complétude : Eviter les pertes d’information toute en préservant la
normalisation des schémas des BDD fragmentées.
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 237
Bases de Données Réparties
 Définition de la fragmentation

Exemple1 : Soit les deux relations suivantes :

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 238


Bases de Données Réparties
 Définition de la fragmentation

La fragmentation suivante va engendrer une perte d’information.


 
RB1 : SELECT B1, B3 FROM RB;
RB2: SELECT B2, B3 FROM RB;

A.Benmakhlouf 239
Bases de Données Réparties
 Définition de la fragmentation

Exemple2:
En prenant les mêmes relations de l’exemple-1. La fragmentation suivante va
engendrer une perte d’information.
 
RB1: SELECT * FROM RB WHERE B2='Y1' and B3=1;
RB2: SELECT * FROM RB WHERE B2!='Y1' and B3!=1;

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 240


Bases de Données Réparties
 Définition de la fragmentation

Définition des fragments horizontaux d'une classe

Dans le cas d’une fragmentation avec annulation de la BDD globale initiale

 Pour éviter de perdre des données dans une FH, on construit tous les
min-termes des variables logiques représentant les conditions de
sélection dans les requêtes
 Pour éviter de sur-fragmenter une BDD on peut rassembler par union
les min-termes qui ne sont pas vérifiés par les requêtes de sélection.
 Supprimer les min-termes contradictoire
 Simplifier les min-termes

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 241


Bases de Données Réparties
 Définition de la fragmentation

Définition des fragments horizontaux d'une classe

On supprime de cette ensemble les termes qui sont toujours fausses et


on simplifie les autres.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 242


Bases de Données Réparties
 Définition de la fragmentation

Définition des fragments horizontaux d'une classe

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 243


Bases de Données Réparties
 Définition de la fragmentation

Définition des fragments horizontaux d'une classe


Exercice: Soit la BDD Relationnelle suivante:

Client(NoClient, NomClient, PrénomClient, VilleCLient, Age)


Agence(CodeAgence, NomAgence, Adresse, Ville)
Compte(IdCompte, NCompte, Solde, NoClient, CodeAgence)

 
 

2- implémenter les fragments des comptes et des clients


3- Créer un trigger de répartition des insertions de nouveaux compte.
4- Créer un trigger de répartition des updates des clients.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 244


Soit les variables logiques représentant les conditions élémentaires suivantes :
a1= (VilleClient = ‘Casablanca’)
b1= (AGE>40)
a2= (VilleClient = ‘Rabat’)
b2= (AGE<30)
 

A.Benmakhlouf 245
Bank1.clients :

Bank1.Comptes : Bank1.clients ⋉ comptes

Bank2.clients :

Bank2Comptes : Bank2.clients ⋉ comptes

Bank3.clients :

Bank3.Comptes : Bank3.clients ⋉ comptes

Le fragment Bank3 est facultatif si on garde la base de données


global Bank

246
A.Benmakhlouf https://coursbenmakhlouf.me.ma/
La fragmentation peut se faire:

1. Requêtes SQL LDD et SELECT suivant les conditions de


fragmentation dans chaque Site.
2. Triggers pour répartir les écritures dans les différents fragments

1. Vues Matérialisées qui vont :


 Créer les fragments suivant les conditions de fragmentation
dans chaque Site.
 Assurer la répartition des écritures à travers le mode et la
méthode de rafraichissement des VMs

247
A.Benmakhlouf https://coursbenmakhlouf.me.ma/
create table bank1.clients as
(select * from clients where villeclient='Casablanca' AND AGE>40);
create table bank1.comptes as (select * from comptes where idclient IN
(select idclient from bank1.clients));

create table bank2.clients as


(select * from clients where villeclient='Rabat' AND AGE<30);
create table bank2.comptes as (select * from comptes where idclient
IN
(select idclient from bank2.clients));

TRIGGER insert_Compte create or replace TRIGGER insert_Compte


TRIGGER update_Compte BEFORE INSERT ON Comptes
TRIGGER delete_Compte FOR EACH ROW
TRIGGER insert_Client
BEGIN
TRIGGER update_Client ….
TRIGGER delete_Client ….
END

248
A.Benmakhlouf https://coursbenmakhlouf.me.ma/
Bases de Données Réparties
 Définition de la fragmentation

Définition des fragments horizontaux d’un schéma


 

1. Pour avoir des fragments de schéma qui respecte les conditions de sélection, il
faut commencer à fragmenter la table R2 puis récupérer le fragment associé de
la table source R1 par semi-jointure.

2. Pour ne pas perdre des données de la table R1 il faut tenir compte des n-uplets
de R1 qui n’existe pas dans la table destination (plusieurs) .

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 249


Bases de Données Réparties
 Définition de la fragmentation

Définition des fragments horizontaux d’un schéma


 

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 250


Bases de Données Réparties
 Définition de la fragmentation

Définition des fragments horizontaux d’un schéma

Créer un trigger de répartition des insertions de nouveaux compte.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 251


Bases de Données Réparties
 Définition de la fragmentation
 Définition des fragments verticaux d'une classe

1. Extraire toutes les expressions de projection concernées par les


requêtes.
2. Ajouter à chacune d'elles le(s) attribut(s) de jointure si elle ne les
possède pas.
3. Générer le complément de chaque expression (c'est à dire les autres
attributs) en ajoutant le (ou les) attribut(s) de jointure.
4. Pour chaque fragment Fi produit par la fragmentation horizontale, on
recherche toutes les requêtes qui concernent ce fragment et à prendre
les expressions de projection de ces requêtes.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 252


Bases de Données Réparties
 Définition de la fragmentation

Exercice : Soit la base de données relationnelles suivantes :


 
Client(NoClient, NomClient, PrénomClient, VilleCLient, Age)
Agence(CodeAgence, NomAgence, Adresse, Ville)
Compte(IdCompte, NCompte, Solde, NoClient, CodeAgence)

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 253


Bases de Données Réparties
 Définition de la fragmentation

 
254
Bases de Données Réparties
 Processus d’allocation des fragments.

• En fonction de l’origine prévue des requêtes qui ont servi à la


fragmentation.
• Le but est de placer les fragments pour minimiser les transferts de
données entre les sites.

I. Allocation sans réplication

II. Allocation avec réplication des données

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 255


Bases de Données Réparties
 Processus d’allocation des fragments.
Allocation sans réplication

Un fragment ne peut exister que dans un seul site.


Chaque donnée est mise à jour sur un seul site.
Cette méthode est plus efficace quand les données sont beaucoup plus
modifiées que lues.

Allocation avec réplication des données

Un fragment peut exister dans plusieurs site (ou tous les sites).
Plus de fiabilité et d’optimisation
Chaque donnée est mise à jour sur tous les sites concernés.
le coût de mise à jour est plus élevé.
Il existe deux types de réplication:

1. Asymétrique
2. Symétrique
https://coursbenmakhlouf.me.ma/ 256
Bases de Données Réparties
 Processus d’allocation des fragments.

Réplication asymétrique

Un site primaire seul autorisé à mettre à jour et chargé de diffuser les


mises à jour aux autres copies dites secondaire. Le site primaire effectue
les contrôles et garantit l'ordonnancement correct des mises à jour. On
distingue l'asymétrique synchrone et l'asymétrique asynchrone.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 257


Bases de Données Réparties
 Processus d’allocation des fragments.

Réplication symétrique
Chaque copie peut être mise à jour à tous instant et assure la diffusion des
mises à jour aux autres copies. On distingue aussi la symétrique synchrone
et la symétrique asynchrone.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 258


Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Synchrone

Une transaction est validée seulement lorsque tous les sites concernés ont
été mis à jour. Ce type de réplication peut se faire à l’aide des triggers.

Concevoir des algorithmes permettant aux triggers d’aiguiller les écritures


faites dans une base de données vers les fragments concernés

Ces algorithmes doivent cerner toutes les conditions utilisées dans la


fragmentation et dans la duplication toute en gardant la cohérence et
l’intégrité de l’information.

Les transactions sont des unités ou des séquences de travail (Ecritures)


accomplies dans un BDD dans un ordre logique, que ce soit de manière
manuelle par un utilisateur ou automatiquement par des programmes de base
de données.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 259


Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Synchrone

Exercice : Soient les fragments de la BDD Bank :


 

{
¿ 𝐶𝑜𝑚𝑝𝑡𝑒𝑠 3=𝜎 ( 𝑉𝑖𝑙𝑙𝑒𝐶𝑙𝑖𝑒𝑛𝑡≠ 𝐶𝑎𝑠𝑎𝑏𝑙𝑎𝑛𝑐𝑎 𝑂𝑅𝑆𝑜𝑙𝑑𝑒 ≥0 ) ( 𝐶𝑜𝑚𝑝𝑡𝑒𝑠 )
′ ′

𝐴𝑁𝐷
𝑩𝑫𝑫 3 : (𝑉𝑖𝑙𝑙𝑒𝐶𝑙𝑖𝑒𝑛𝑡 ≠ 𝑅𝑎𝑏𝑎𝑡 ′ 𝑂𝑅𝑆𝑜𝑙𝑑𝑒<0)

¿
¿ 𝐶𝑙𝑖𝑒𝑛𝑡 3=( 𝐶𝑙𝑖𝑒𝑛𝑡𝑠 ⋉ 𝐶𝑜𝑚𝑝𝑡𝑒𝑠 3 )

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 260


Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Synchrone

261
Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Synchrone
- Des triggers de duplication qui permettent de synchroniser les insertions les
suppressions et les mises à jour du SiteB1.BDD1vers les fragments répliqués
SiteB2.BDD1 et SiteB3.BDD1.
- Des triggers de répartitions qui permettent d’automatiser les écritures faites dans la
BDD globale vers les fragments concernés.

262
Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Asynchrone

Les sites de réplication sont mis-à-jour en différé après la confirmation de la


transaction. Ce type de réplication peut se faire à l’aide des vues
matérialisées.

L'utilisation de vues matérialisées sur des tables distantes est le moyen le


plus simple de répliquer les données entre les sites. 

syntaxe :
CREATE MATERIALIZED VIEW TableCopie
[REFRESH {FAST|COMPLETE|FORCE}
[ON COMMIT|ON DEMAND]] [FOR UPDATE]
AS
Select * from Table

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 263


Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Asynchrone

Les Vues Matérialisées VM

Les VM permettent de créer des vues physiques d’une table ou d’une requête SQL sur
un ensemble de table. La différence d’une vue standard c’est que les données sont
dupliquées.

Utilisé pour, des fins d’optimisation de performance,


- lorsqu’une requête demande l’exécution d’un ensemble de sous-requêtes,
- pour faire des réplications de table.

La « fraicheur » ou la mise à jour des données de la VM dépend des options choisies.


Le décalage entre les données de la table maître et la VM peut être nul
(rafraichissement synchrone) ou d’une durée planifiée : heure, jour,etc.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 264


Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Asynchrone

Les méthodes de rafraichissement de la VM


Méthode FAST

FAST: mise-à-jour partielle de la copie locale. C’est la méthode la plus


efficace Pour réduire les coûts de réplication,

Lorsque des changements sont effectués sur les données d'une table
maître, Oracle stocke les lignes qui dérivent ces changements dans le
journal de vue matérialisée (fichier log), et utilise ensuite ces changements
dans le journal de vue matérialisé pour réactualiser les vues matérialisées
par rapport à la table maître. :

create materialized view log on Table_maitre;

(Disponible dans Oracle Enterprise Edition.)


265
Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Asynchrone

Les méthodes de rafraichissement de la VM


Méthode FAST

Un journal de vues matérialisées est un objet de schéma qui enregistre les


modifications apportées à une table de base afin qu'une vue matérialisée définie sur
la table de base puisse être actualisée de manière incrémentielle. 

Chaque journal de vues matérialisées est associé à une seule table de base. Le journal
des vues matérialisées réside dans la même base de données et le même schéma
que sa table de base.

266
Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Asynchrone

Les méthodes de rafraichissement de la VM


Méthode FAST

create Materialized View Log on comptes with Rowid, Primary key;

Create Materialized View V1


Refresh Fast on Commit as
select idclient, count(idcompte) as nb
from comptes
where Solde>0
group by Idclient;
with Rowid, Primary key: inclure la colonne de clé primaire et le rowids de toutes les
lignes modifiées de la table de base dans un journal de vues matérialisées

267
Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Asynchrone

Les méthodes de rafraichissement de la VM


Méthode FAST

268
Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Asynchrone

Les méthodes de rafraichissement de la VM


Méthode FAST

Des conditions spécifiques doivent être vérifiées pour une actualisation


rapide. Ci-dessous quelques restrictions générales
 La vue matérialisée ne doit pas contenir de références à des expressions non
répétitives telles que SYSDATE et ROWNUM.
 Ne peut pas contenir de HAVING clause avec une sous-requête.
 Ne peut pas contenir de [START WITH …] CONNECT BYclause.
 Ne peut pas contenir plusieurs tableaux détaillés sur différents sites.
 La vue matérialisée lors de la validation ne peut pas avoir de tables de détails
distantes.
269
Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Asynchrone

Les méthodes de rafraichissement de la VM


Méthode COMPLET

effectue le refresh complet en exécutant le SELECT de définition de la MV.


L'actualisation implique la relecture des tableaux détaillés pour recalculer les
résultats de la vue matérialisée. 

Cela peut être un processus très long, surtout s'il y a d'énormes quantités de
données à lire et à traiter. Par conséquent, on doit toujours tenir compte du
temps nécessaire pour traiter une actualisation complète avant de la demander.

Il existe des cas où la seule méthode d'actualisation disponible est l'actualisation


complète car la vue matérialisée ne satisfait pas aux conditions spécifiées ci-
dessous pour une actualisation rapide

270
Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Asynchrone

Les méthodes de rafraichissement de la VM


Méthode FORCE

C’est la méthode par défaut. Cette méthode effectue dans un premier temps une
actualisation rapide (FAST). Si cette dernière échoue, une actualisation complète se
produira.

271
Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Asynchrone

Vérification de la méthode de rafraichissement sur une VM :


Oracle dispose de la procédure dbms_Mview.explain_Mview(‘NomVM’) qui
permet de vérifier la méthode d’actualisation appliquée sur une VM déjà créé.
create table MV_CAPABILITIES_TABLE begin
( dbms_Mview.explain_Mview(‘VM’);
statement_id varchar(30) , end;
mvowner varchar(30) ,
mvname varchar(30) ,
capability_name varchar(30) ,
possible character(1) ,
related_text varchar(2000) ,
related_num number ,
msgno integer ,
msgtxt varchar(2000) ,
seq number
) ;
272
Bases de Données Réparties
 Processus d’allocation des fragments.
Réplication Asynchrone

Les modes de rafraichissement de la VM

ON COMMIT: rafraîchissement lorsqu’une transaction modifiant les tables


maîtresses fait un commit. Ce mode de rafraichissement est utilisé que si la table
maître est dans la même base de données où on a créé la vue matérialisée. Par
conséquent le mode « on commit » n'est pas pris en charge dans les bases de données
distantes.
 
ON DEMAND (par défaut): C’est un rafraîchissement sur demande de l’usager ou à
un instant qui peut être spécifié avec les clauses START et NEXT. Ce mode est utilisé
dans le cas des VM qui utilisent des tables maitresses distantes.
L’actualisation peut être effectuée avec les méthodes d'actualisation fournies dans le
DBMS_MVIEW packages
 DBMS_MVIEW.REFRESH(‘NomVM’): Actualisez une ou plusieurs VM.
 DBMS_MVIEW.REFRESH_ALL_MVIEWS Actualisez toutes les VM.
273
Bases de Données Réparties
 Processus d’allocation des fragments.
Exercice: Soient les fragments de la BDD Bank suivants

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 274


Bases de Données Réparties
 Processus d’allocation des fragments.
Dans le site-1 (BDD1) :
 
create materialized view clients1
refresh complete on demand as
select distinct clients.* from bankcenter.clients@liencenter,
bankcenter.comptes@liencenter
where clients.idclient=comptes.idclient
AND villeclient='Casablanca' AND solde<0;
 
create materialized view comptes1
refresh complete on demand as
select distinct comptes.* from bankcenter.clients@liencenter,
bankcenter.comptes@liencenter
where clients.idclient=comptes.idclient
AND villeclient='Casablanca' AND solde<0;
 
Pour demander le rafraîchissement :
 
execute dbms_mview.refresh('clients1');
execute dbms_mview.refresh('comptes1'); 275
Bases de Données Réparties
 Processus d’allocation des fragments.

Le problème d’allocation consiste à définir une répartition des fragments


sur les sites afin de réduire le temps de réponse des requêtes sur des
données distribuées avec ou sans réplication sur plusieurs sites.

Méthode ABS (ALL Beneficial Sites): Cas de la réplication

Se base sur le principe de stocker un fragment sur tous les sites où le


bénéfice du stockage est supérieur à son coût.

Bénéfice = (temps de lecture distant - temps de lecture local)


Coût = coût de la mise à jour locale + coût des mises à jour distantes

Une requête d’écriture (insertion, mise à jour et suppression) doit être effectuée
sur tous les sites où les données concernées par cette requête sont dupliquées.
Une requête de lecture (sélection, projection) doit être effectuée à partir du site
local, si les données concernées existent ,sinon à partir du site le plus rapidement
accessible.
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 276
Bases de Données Réparties
 Processus d’allocation des fragments.
 

Définitions : Une transaction est un ensemble d’opérations menées sur une BD,
- Ces opérations peuvent être en lecture et/ou écriture,
- Une transaction est soit validée par un commit, soit annulée par un rollback, soit
interrompue par un abort, 277
Bases de Données Réparties
 Processus d’allocation des fragments.

Avec :
Fqi : fréquence d’une transaction Tri.
Nacci : nombre d’accès (en lecture ou en Ecriture) aux données d’un
fragment Rk pour réaliser la transaction Ti
NSi : nbre de site (Local ou Distant) réalisant une transaction Ti en utilisant
les données d’un fragment Rk. Dans le cas d’un accès en locale ou en
lecture NSi est toujours égal à 1
Tacc : temps d’accès en local et à distance à un fragment Rk.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 278


Bases de Données Réparties
 Processus d’allocation des fragments.

Table-1 : temps d’accès (ms) en Lecture et en Ecriture (Local et remote) à un fragment Rk.

Table-2 : Les Sites, Les fréquences, les nombre d’accès en lecture et en Ecriture par transaction et par
fragment.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 279


Bases de Données Réparties
 Processus d’allocation des fragments.

Exemple:
Si R1 et dans S4. elle sera attaquée par :
Exemple:
- En
Si R1écriture
et danspar
S1.T1 ensera
elle localattaquée
et par T1par
à distance
: de S4 et S5: (Coût = 150 + 600*1*1*2)
-- En
En écriture
lecture par
par T1
T1 et
enT2 en et
local local
parou
T1par T1 à distance
à distance de S4 de S4 ou
et S5: S5 et
(Coût = par
150T2 de S2 :
+ 600*1*1*2)
-(benef =500*1*3*1
En lecture + 500*2*2*1
par T1 en local ou par – 300)
T1 à distance de S4 ou S5: (benef =500*1*3*1 – 300)
Bases de Données Réparties
 Processus d’allocation des fragments.
R1  S4
R2  S3 et S5
R3  S2, S3, S4 et S5

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 281


Bases de Données Réparties
 Optimisation des requêtes Réparties.

On applique les règles d'exécution et les méthodes d'optimisation de


requêtes appliquées pour des BDD centralisé en prenant en considération la
fragmentation et la répartition des données sur différents sites, et d'autre
part le problème du coût des communications entre sites pour transférer les
données.
 Les requêtes d’écriture vont être concernées par les coûts générer par
l’allocation des fragments dans les différents sites.
 Les requêtes de lecture vont être concernées par les coûts:
-
Entrées/ Sorties sur les disques, c’est le coût d’accès aux données.
-
CPU : c’est le coût des traitements de données pour exécuter les
opérations algébriques (jointures, sélections ...).
-
Communication sur le réseau : c’est le temps nécessaire pour échanger un
volume de données entre des sites participant à l’exécution d’une
requête.
282
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de d’Ecriture

- Insertion
- Suppression
- Modification

Les requêtes d’écriture vont être concernées par le problème de la fragmentation et


de duplication

Les Ecritures synchrones


Les Ecritures Asynchrones

283
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture

Le Coût est défini par:

 Nombre Entrées/ Sorties sur les disques, c’est le coût d’accès aux
données dans le disque.

 Coût CPU : c’est le coût des traitements de données pour exécuter les
opérations algébriques (jointures, sélections ...).

 Coût de la Communication sur le réseau dans le cas des données


réparties

284
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée – Plan d’Exécution

Plan d’Exécution: Oracle permet d’afficher le plan d’exécution choisi


par l’optimiseur. On observe ainsi toutes les opérations faites par le
moteur de requête. 

285
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée – Plan d’Exécution

 Cost Cet indicateur est une synthèse estimée des différents coûts


(accès disque, CPU, etc.). Cet indicateur est sans unité puisqu’il ne sert
qu'à comparer différents plans entre eux.
 Cardinality est une estimation a priori du nombre de lignes remontées
par la requête à ce stade (exemple : le nombre de lignes remontées par
la jointure est de 874).
 Operation : Le nom de l’opération que peut effectuer l’optimiseur pour
joindre les tables (ex : ‘NESTED LOOPS’, ‘HASH JOIN’ ou MERGE
JOIN).
 Option : représente le mode pour accéder aux objets consultés. On note
les modes (Table Access FULL , Table Access by Rowid , Index (Inique|Range|…)
Scan , …)

286
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée – Plan d’Exécution

Les Opérations : Le nom de l’opération que peut effectuer l’optimiseur pour


joindre les tables

NESTED LOOPS JOIN


Les boucles imbriquées Pour chaque ligne de l'ensemble de données de la table
source on cherche son correspondant dans chaque ligne de la table
destination
Le HASH JOIN
C’est le choix habituel de l'optimiseur Oracle, il accède à une table
(généralement la plus petite) et crée une table de hachage sur la clé de
jointure, Il analyse ensuite l'autre table de la jointure (généralement la plus
grande) et explore la table de hachage pour y trouver des correspondances. 

La HASH JOIN reste plus rapide qu'une jointure NESTED LOOPS


287
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée – Plan d’Exécution

MERGE JOIN
Les jointures par fusion de tri est une variante d'une jointure par boucles
imbriquées. la base de données trie les données de la jointure. Pour chaque ligne du
premier ensemble de données, la base de données sonde le second ensemble de
données, mais en commençant par la position où les itérations précédentes se sont
arrêtés. 

CARTESIAN JOIN
C’est le produit cartésien entre deux tables. La base de données utilise une jointure
cartésienne lorsqu'une ou plusieurs des tables n'ont aucune condition de jointure à
d'autres tables de l'instruction.

288
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée - L’Indexation -

Un index est une structure de données utilisée par les systèmes d’information pour lui
faciliter de retrouver rapidement des données. L’utilisation des index dans une base
de données facilite et accélère les opérations de recherche de tri, de jointure ou
d'agrégation effectuées par le SGBD.

Oracle créé systématiquement un index chaque fois que l’on crée une clef
primaire (PRIMARY KEY) ou une contrainte d’unicité (UNIQUE) sur une table

Les index doivent être utilisés sur les attributs qui sont :
 Souvent mobilisés dans une jointure (clé Etrangère)
 Très discriminés (c'est à dire pour lesquels peu d'enregistrements ont les mêmes
valeurs)
 Rarement modifiés
Attention!!!!!: - Les index diminuent les performances en mise à jour
- Les index ajoutent du volume à la base de données 289
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée - L’Indexation - index arbres B

L’index arbres B,
Arbres équilibrés, sont le type d'index le plus courant. C’est une liste
ordonnée de valeurs divisées en plages. En associant une clé à chaque
plage de lignes,
CREATE INDEX nom_index ON nom_table(NomColonneClé1,
NomColonneClé2, ...);

290
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée - L’Indexation - index arbres B

Soit la requête sans index

291
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée - L’Indexation - index arbres B


Soit la même requête avec index

292
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée - L’Indexation - index arbres B


Exemple : Soit l’index sur l’attribut Solde de la table « Comptes » :

create index index_solde on comptes(solde);


select idcompte, solde
FROM comptes
where ABS(solde)<10000;

Le plan d’exécution de cette requête montre que l’index n’est pas utilisé.
Nous constatons que l’accès à la table « comptes » est FULL

293
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée - L’Indexation - index arbres B


Si on crée l’index sur la fonction ABS(Solde) :

drop index index_solde;


create index index_solde on comptes(ABS(solde));
select idcompte, solde
FROM comptes
where ABS(solde)<10000;

Le plan d’exécution de cette requête montre que l’index est utilisé.


Nous constatons que l’accès à la table « comptes » est « By Index Rowid »

294
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée - L’Indexation - index bitmap

L’index bitmap
La base de données stocke une image bitmap pour chaque clé d'index

CREATE BITMAP INDEX nom_index ON


nom_table(NomColonneClé1, NomColonneClé2, ...);

Les indexes bitmap sont efficace lorsque :


 Les colonnes indexées ont faible cardinalité, c'est-à-dire que le nombre de
valeurs distinctes est petit par rapport au nombre de lignes du tableau.
 La table indexée est en lecture seule ou n'est pas cible de modification
significative par les instructions LMD.

Les index bitmap sont donc principalement destinés aux applications


d'entreposage de données (Les Data Warehouse
295
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée - L’Indexation - index bitmap


Exemple : Soit la table « clients » suivante :

RowID Casablanc EL-Jadida Fès Marrakech Meknès Mohammedia Rabat


L’index bitmap sur le champ « villeclient » est donné par :
a
1 0 0 0 0 0 0 1
2 0 0 0 1 0 0 0
3 1 0 0 0 0 0 0
4 0 0 0 0 0 1 0
5 0 1 0 0 0 0 0
6 0 1 0 0 0 0 0
7 0 0 0 0 0 0 1
8 0 0 0 0 0 0 1
9 0 0 1 0 0 0 0
10 0 0 0 0 1 0 0 296
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée - L’Indexation - index bitmap


SELECT * from clients WHERE Villeclient=’Rabat’

revient à sélectionner dans la table de l’index bitmap les rowid ayant Rabat = 1
RowID Casa EL-Jadida Fès Marrakech Meknès Mohammedia Rabat
1 0 0 0 0 0 0 1
7 0 0 0 0 0 0 1
8 0 0 0 0 0 0 1

297
Bases de Données Réparties
 Optimisation des requêtes Réparties.

Requêtes de Lecture – BDD Centralisée - L’Indexation - index bitmap


Le véritable avantage de l'indexation bitmap se produit lorsqu'une table comprend
plusieurs index bitmap. 

SELECT * FROM clients where VilleClient=’Rabat’ AND Genre=’Homme’;

Rowid VilleClient=’Rabat’ AND Genre=’Homme’

7 1
8 1

298
Bases de Données Réparties
 Optimisation des requêtes dans une BDD centrale.

Restructuration par les optimiseurs des arbres algébriques des requêtes

• On préfère toujours faire des produits cartésiens avec le minimum de


tuples possible.
• On cherche donc à remplacer les jointures par les semi-jointures.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 299


Bases de Données Réparties
 Optimisation des requêtes dans une BDD centrale.

En SQL cette requête peut être écrite suivant trois algorithmes :


 
En utilisant des restrictions sur le produit cartésien :
SELECT a, b
FROM R1, R2
WHERE R1.a=R2.x AND y<0
 
En utilisant une restriction sur la jointure :
SELECT a, b
FROM R1 INNER JOIN R2
ON R1.a=R2.x
WHERE y<0
 
En utilisant une semi-jointure
SELECT a, b
FROM R1 WHERE a IN (SELECT x FROM R2 WHERE y<0) ;
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 300
Bases de Données Réparties
 Optimisation des requêtes dans une BDD centrale.

Soit le schéma d’une BDD


 
Clients(codeclient, Société, Adresse, Tel)
Commandes(N°Commande, DateCommande, codeClient)
Produits(Réf, Designation, Stock, PrixUnitaire)
DétailCommandes(N°Commande, Réf, Quantité)

 
Question traitée : Quel sont les clients qui ont commandé le
produit « Tarte au sucre » avec une quantité par commande >20

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 301


Bases de Données Réparties
 Optimisation des requêtes dans une BDD centrale.

SELECT DISTINCT Clients.Codeclient, Société


FROM Clients, Commandes, Produits, [Détails Commandes]
WHERE Clients.Codeclient = Commandes.Codeclient
AND Commandes.N°commande = [Détails
Commandes].N°commande
AND Produits.Réfproduit = [Détails Commandes].Réfproduit
AND Quantité > 20
AND Designation="Tarte au sucre"
ORDER BY Société;

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 302


Bases de Données Réparties
 Optimisation des requêtes dans une BDD centrale.

L’arbre algébrique de l’exemple traité est donné par :

Clt = Client
Cde = Commande
DC = DétailsCommande
Ref = RéfProduit
Désig = Désignation
Qt = Quantité

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 303


Bases de Données Réparties
 Optimisation des requêtes dans une BDD centrale.
Restructuration de l’arbre algébrique
Afin de réduire le nombre de ligne des relations utilisées dans les jointures

SELECT DISTINCT Clients.Codeclient, Société FROM (Clients INNER JOIN


Commandes ON Clients.Codeclient = Commandes.Codeclient) WHERE
N°commande IN (SELECT DISTINCT N°commande FROM [Détails Commandes]
WHERE Quantité>20 AND Réfproduit IN (SELECT Réfproduit FROM produits
WHERE designation="Tarte au sucre"));
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 304
Bases de Données Réparties
 Optimisation des requêtes dans une BDD centrale.
Les optimiseur permettent de Restructurer l’arbre algébrique
Afin de réduire le nombre de ligne des relations utilisées dans les jointures

SELECT DISTINCT Clients.Codeclient, Société FROM (Clients INNER JOIN


Commandes ON Clients.Codeclient = Commandes.Codeclient) WHERE
N°commande IN (SELECT DISTINCT N°commande FROM [Détails Commandes]
WHERE Quantité>20 AND Réfproduit IN (SELECT Réfproduit FROM produits
WHERE designation="Tarte au sucre"));

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 305


Bases de Données Réparties
 Optimisation des requêtes dans une BDD centrale.
Exemple:
SELECT DISTINCT Clients.Codeclient, Societe
FROM Clients, Commandes, Produits, Lignecommandes
WHERE Clients.idclient = Commandes.idclient
AND Commandes.idcommande = Lignecommandes.Idcommande
AND Produits.idproduit = Lignecommandes.Idproduit
AND Quantite > 20
AND Designation='lectus'
ORDER BY Societe;

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 306


Bases de Données Réparties
 Optimisation des requêtes dans une BDD réparties.

- Le parallélisme des opérations, c.-à-d. le calcule simultanément plusieurs


opérations d’une même requête reste aussi valable dans les BDR

- Pour effectuer ces opérations il faut transférer entre les sites une quantité
minimale de données.

Optimisation globale.

Optimisation par semi-jointure

Optimisation par Parallélisme inter-opération et inter-site

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 307


Bases de Données Réparties
 Optimisation des requêtes dans une BDD réparties.
Optimisation globale.
La règle est de transférer la plus petite table d’abord.
Soient des jointures entre les tables T1, T2 etT3. Chaque site « Si » contient
une seule table « Ti ».
Algo 1 : Algo 2 :
Transférer T1 au site 2 Transférer T2 au site 1
R=T1 ⋈ T2 au site 2 R=T1 ⋈ T2 au site 1
Transférer R au site 3 Transférer R au site 3
R ⋈ T3 est le Résultat final au site 3 R ⋈ T3 est le Résultat final au site 3

Algo 3 : • Si on suppose que le nombre de tuples de


Transférer T1 au site 3 chaque relation est donné de telle sorte
qu’on a : NT1<NT2<NT3.
Transférer T2 au site 3
T1 ⋈ T2 ⋈ T3 est le Résultat final • L’algorithme algo-3 sera donc le plus
au site 3 optimal.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 308


Bases de Données Réparties
 Optimisation des requêtes dans une BDD réparties.
Optimisation par semi-jointure.
la réglé est d’effectuer une semi-jointure au lieu d’une jointure complète. .
Pour effectuer la jointure T1⨝T2 :

Algo 1 (sans optimisation) :  


Transférer T2 au site 1
T1 ⨝ T2 = Résultat final au site 1

Il faut donc transférer au site2 seulement les colonnes de « T1 » nécessaires


à la semi-jointure (ensemble A). Renvoyer ensuite au site1 le résultat de la
semi-jointure pour compléter la jointure avec les autres colonnes.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 309


Bases de Données Réparties
 Optimisation des requêtes dans une BDD réparties.
Optimisation par Parallélisme inter-opération et inter-site
.
la réglé est d’effectuer une semi-jointure au lieu d’une jointure complète. .
Soit les opérations : T1 ⨝ T2 ⨝ T3 ⨝ T4

Algorithme :

Transférer T2 au site1
R = T1 ⨝ T2 au site1
En parallèle, transférer T4 au site3
S = T3 ⨝ T4 au site 3
Transférer S au site 1
Ensuite, R ⨝ S = Résultat final au site 1

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 310


Bases de Données Réparties

Exemple : Soit le schéma d’une BDD


 
Clients(codeclient, Société, Adresse, Tel)
Commandes(N°Commande, DateCommande, codeClient)
Produits(Réf, Designation, Stock, PrixUnitaire)
DétailCommandes(N°Commande, Réf, Quantité)
 
Question traitée : Quels sont les clients de France qui ont commandé le
produit « Tarte au sucre » avec une quantité par commande >20.
 
On suppose la répartition de la BDD suivantes :
 
- Table « clients » dans le Site1
- Table « commandes » dans le Site2
- Table « détailscommandes » dans le Site3
- Table « produits » dans le site4

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 311


Bases de Données Réparties

Requête répartie non optimisé :


 
1.Transférer commandes au Site1 : R1 = clients ⨝ Commandes dans Site1
2.Transférer détailsCommandes au site1 : R2 = R1 ⨝ détailsCommandes dans
Site1
3.Transférer produits au site1 : R3 = R2 ⨝ Produits.
4.Restructuration de la requête par l’optimiseur

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 312


Requête répartie avec optimisation par Parallélisme :
 
Transférer commandes au Site1 : G = clients ⨝ Commandes dans Site1
Transférer produits au site2 : D = DétailsCommandes ⨝ Produits dans Site2
Transférer D au site1 : R = G ⨝ D.
Dans le Site1 :

Dans le Site 2 :

Dans le Site1 :

313
Bases de Données Réparties
 BD répartie avec Oracle
DATABASE LINKS
 Un DBlink est un objet Oracle permettant de créer un lien entre plusieurs
bases de données Oracle
 Ce lien peut être sur tout autre hôte joignable par le protocole TCP/IP.

les BD link permettent de manipuler les d’une BDD répartie sur plusieurs sites
distant comme si s’était une BDD centrale stocké dans un seul serveur.

Pour créer un DBLink, il faut que les fichiers de configuration


« tnsname.ora » et « lestener.ora » soit correctement renseigné sur le service
de connexion à distance :

1. Adresse : Protocol, Host et le Port


2. Connexion des data : nom du serveur et le nom du service

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 314


Bases de Données Réparties
 BD répartie avec Oracle
DATABASE LINKS

Syntaxe :
 
CREATE [SHARED] [PUBLIC] DATABASE LINK nomLien CONNECT TO
compteUtilisateur IDENTIFY BY motDePasse USING
Host:serveur/nomService

 SHARED: permet de partager la connexion entre plusieurs usagers


 PUBLIC : rend le lien disponible à tous les usagers locaux
 NOMSERVICE : Spécifie le nom de service d'une base de données
distante. Il doit être défini dans les fichiers de configuration de la BDD
Oracle (Listener.ora et tnsname.ora).

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 315


Bases de Données Réparties
 BD répartie avec Oracle
DATABASE LINKS

Dans Site1:
 
CREATE PUBLIC DATABASE LINKSITE2
CONNECT TO USERSITE2 IDENTIFIED BY ''1111'' USING 'SITE2';
 
On peut écrire la requête suivante pour interroger la BDD_Site2 à partir de SITE1.
 
Dans SITE1: SELECT * from BDD_SITE2.Table@LINKSITE2.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 316


Bases de Données Réparties
 BD répartie avec Oracle
Transparence de localisation (SYNONYM)
Les synonymes permettent principalement de cacher la localisation des
tables distantes et donc de n’utiliser dans les requêtes que les nom des
tables distantes.

 
CREATE [PUBLIC] SYNONYM BDD_SITE2.Table
FOR BDD_SITE2.Table@LINKSITE2.
 
SELECT * FROM BDD_SITE2

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 317


Bases de Données Réparties
 BD répartie avec Oracle
Manipulation des données dans une BDD Oracle répartie dans un réseau
virtuel
Voir TP5
Client(NoClient, NomClient, PrénomClient, VilleCLient, Age)
Agence(CodeAgence, NomAgence, Adresse, Ville)
Compte(IdCompte, NCompte, Solde, NoClient, CodeAgence)

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 318


Base de Données Décisionnelles
DATA WAREHOUSE

Mécanisme de gestion des Data


Warehouse avec ORACLE

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 319


A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 320
Bases de Données Décisionnelles
 Limite du modèle Relationnel 

La non redondance et la Normalisation

Coût très élevé dans les calculs analytiques


(Requêtes complexes)
Incapacité de fournir des services décisionnels

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 321


Bases de Données Décisionnelles
 Entrepôts de Données 

 Une collection de données orientées sujets, intégrées, non volatiles et


historisées, organisées afin de servir de source de données à des
applications décisionnelles.

 un gigantesque tas de données fortement agrégées à partir d’un


ensemble de données provenant de plusieurs sources, principalement de
BDD transactionnelle (BDD de production)

L'objectif : faciliter des requêtes sur de grands ensembles des données,


la plupart du temps sous forme d'agrégats (GROUP BY) afin d'en obtenir
une vision synthétique (propre à la prise de décision).
Le data Warehouse n’est donc pas un produit ni un logiciel qu’on va se
procurer mais un environnement qui se bâtit.
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 322
Bases de Données Décisionnelles
 Architecture d’un DW 

323
Bases de Données Décisionnelles
 Les BDR et les DW 
BDR :
 le mode de travail est transactionnel.
 Les requêtes sont de type OLTP (ON-LINE Transaction Processing),
permettent d'insérer, modifier, interroger des Informations rapidement,
efficacement et en sécurité.

DW :
 le mode de travail est Décisionnel.
 Les requêtes sont de type OLAP (ON-LINE Analytics Processing),
permettent de regrouper, organiser des informations provenant de sources
diverses, les intégrer et les stocker pour retrouver et analyser l’information
facilement et rapidement.

Dans les deux modes le SQL reste le langage des requêtes avec la possibilité
d’agréger les données à l’aide de la commande (Group By).

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 324


Bases de Données Décisionnelles
 Les BDR et les DW 
  OLTP OLAP
Modèle Entité association (Fait dimension). Schéma
en étoile, flocon de neige
ou en constellation
Application Production Aide à la décision
Données Normalisées, non Dénormalisées,
agrégées agrégées
Requête simples, nombreuses, complexes, peu
régulières, prévisibles, nombreuses, irrégulières,

Nombre moyen de dizaines Millions


tuples invoqués par
requête
Volume Des Giga Octets Des Téra Octets
Ancienneté des récente, mises à jour historique
données 325
Bases de Données Décisionnelles
 Les BDR et les DW 
Pas les mêmes objectifs :
 BDR sont développées pour des fins de production
 DW sont construites pour des fins d’analyse.

Pas les mêmes données :


 les données d’une BDR représentent une vue aplatie (données
élémentaires)
 les données d’une DW représentent une vue analytique (données
synthétisées).

Pas les mêmes traitements :


 BDR les traitements se font par des opérations algébriques sur des relations
 DW les traitements se font par des opérations algébriques sur des tables
multidimensionnels

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 326


Bases de Données Décisionnelles
 Modélisation d’un DW 

Elle s’appuie sur le couple Fait/Dimension

1. Identification du processus métier analysé.


2. Établissement du niveau de granularité de l’analyse (Ventes par région ou
plus détaillé Ventes par ville)
3. Établissement des dimensions qui s’appliquent à chaque ligne de fait
4. Identification des caractéristiques numériques qui s’appliquent à chaque
ligne de fait.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 327


Bases de Données Décisionnelles
 Modélisation d’un DW 

 la table des faits contient l’information à analyser (par exemple les ventes)
 Les tables de dimensions contiennent les informations sur les dimensions
d’analyse (par exemple le lieu, le temps, la description du produit).

Les tables faits contiennent des informations sur les mesures numériques et
sur les dimensions

 Les mesures numériques propres à chaque fait sont l’objet de calculs


d’analyse (montant global, moyenne globale, …)
 les dimensions constituent des facteurs de sélection des faits étudiés (Non
produits, catégories des produits, …).

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 328


Bases de Données Décisionnelles
 Modélisation d’un DW 
Schéma étoile (Star Schema)
La table des faits contient les clés étrangères vers les tables de dimension.
Les tables dimensions ne sont pas normalisées.

329
Bases de Données Décisionnelles
 Modélisation d’un DW 
Schéma en flocon (Snowflake Schema)
Les tables de dimensions sont normalisées pour constituer une structure
hiérarchique. Ceci a pour avantage de réduire la redondance, mais d’un autre
coté le nombre de jointure augmente

330
Bases de Données Décisionnelles
 Implémentation d'un datawarehouse (ROLAP) 
 Les données sont stockées dans une BDD relationnelles.
 sont modélisées sous la forme de schémas en étoile ou en flocon.
 Les requêtes multidimensionnelles sont traduites en requêtes
relationnelles (SQL).
 L’implémentation se fait à l’aide des Vues Matérialisées.

Avantages :
 capacité de stockage importante,
 gérer de grandes quantités de données
 tirer parti des différentes fonctionnalités déjà existantes dans les
bases de données relationnelles.
Inconvénients:
• requêtes difficiles à définir et à mettre en œuvre et sont coûteuse.
• Chaque rapport ROLAP étant essentiellement une ou plusieurs requêtes
SQL dans la BDDR,
• le temps de requête peut être long si la taille des données est
importante. 331
Bases de Données Décisionnelles
 Implémentation d'un datawarehouse (ROLAP) 

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 332


Bases de Données Décisionnelles
 Implémentation d'un datawarehouse (MOLAP) 
 La technologie de stockage est multidimensionnelle (hypercube).
 Les données sont stockées sous la forme de tableaux multidimensionnels
 Les données sont plus compressées par rapport à la solution ROLAP.
 Demande des SGBD multidimensionnels avec un langage de manipulation
des données qui n’est pas aussi développé que le SQL.
Avantages
 Les Performances sont plus parfaites puisque les cubes MOLAP sont
conçus pour une récupération rapide et optimales des données pour les
opérations de découpage.
 peut donc effectuer des calculs complexes : tous les calculs ont été pré-
générés lors de la création du cube.
Inconvénients
 La quantité de données à gérer est limitée : Tous les calculs étant
effectués lors de la création du cube, il est impossible d’inclure une
grande quantité de données dans le cube lui-même.
 En plus les SGBD sont propriétaire.
333
Bases de Données Décisionnelles
 Implémentation d'un datawarehouse (MOLAP) 

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 334


Bases de Données Décisionnelles
 Implémentation d'un datawarehouse 

Les SGBDs qui permettent de gérer et de manipuler des DWs ROLAP et


MOLAP

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 335


Bases de Données Décisionnelles
 Cubes de données 
A partir d’un schéma en étoile ou en flocon on peut construire un hypercube de
donnée de n dimension.
Les dimensions peuvent être munies de hiérarchies. On distingue alors les
hiérarchies simples des hiérarchies multiples
Le niveau ALL correspond à l’agrégation totale.

Le contenu des cellules de l’hypercube désigne une mesure. Cette dernière


peut être: additive, semi-additive ou non additive 336
Bases de Données Décisionnelles
 Cubes de données 
Exemple de Requête complexe : Quel est le type de produits a réalisé la
meilleure vente sur une période donnée, pour une ville précise ?

Exemple d’hypercube OLAP : Cube des Ventes


Produit × Ville × Mois  Ventes

337
Bases de Données Décisionnelles
 Construction d’un Cubes de données 

Pour construire un hypercube de données à n dimensions à partir d’un modèle


en étoile on exécute la requête SQL suivante :
 
SELECT Dim1, Dim2, …., Dimn, Agrégat(expression)
FROM Fait, Dim1, Dim2, …., Dimn
WHERE jointure
GROUP BY Dim1, Dim2, …., Dimn
HAVING (Conditions)

Exemple:

SELECT Nom, Mois, NomVille, SUM(Montant) as MT


FROM Ventes, Date, Ville, Produit
WHERE Ventes.IdDate=Date.IdDate
AND Ventes.IdVille=Ville.IdVille
AND Ventes.IdProduit=Produits.IdProduit
GROUP BY Nom, Mois, NomVille;
338
Bases de Données Décisionnelles
 Opération sur les hypercubes 
 Les opérateurs sur les cubes (Opération de sélection : Slicing et Dicing)
 Les opérateurs sur les dimensions qui permettent de changer la granularité
des dimensions (Roll up et Drill Down).

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 339


Bases de Données Décisionnelles
 Opération sur les hypercubes 

340
Bases de Données Décisionnelles
 Opération sur les hypercubes (Sélection) 
Slicing: Sélection des surfaces du cube par des prédicats selon une dimension

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 341


Bases de Données Décisionnelles
 Opération sur les hypercubes (Sélection) 
Dicing: extraction d'un sous-cube ou Sélection des sous-cubes du cube par
des prédicats selon plusieurs dimensions

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 342


Bases de Données Décisionnelles
 Opération de Changement de granularité
Roll-up: Représenter les données du cube à un niveau de granularité
supérieur

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 343


Bases de Données Décisionnelles
 Opération de Changement de granularité
Drill-down: Représenter les données du cube à un niveau de granularité de
niveau inférieur, donc sous une forme plus détaillée.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 344


Bases de Données Décisionnelles
 Les fonction d’agrégation dans les DWs
Ce sont des extension de GROUP BY
Fonction ROLLUP
Génère des sous-totaux de groupe de droite à gauche et un total général.

SELECT A1, A2, A3, ….,An, Agrégat(M)


FROM T1, T2, ….
WHRE jointures
GROUP BY ROLLUP (A1, A2, A3, ….,An)

Le résultat:
Total par A1, A2, ……….…, An
Total par A1, A2, ………, An-1
Total par A1, A2, ….., An-2
Total par A1, A2
Total par A1
Total général
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 345
Bases de Données Décisionnelles
 Les fonction d’agrégation dans les DWs

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 346


Bases de Données Décisionnelles
 Les fonction d’agrégation dans les DWs
Fonction CUBE
Extension de ROLLUP qui génère des sous-totaux pour toutes les
combinaisons des dimensions spécifiées..

SELECT A1, A2, A3, ….,An, Agrégat(M)


FROM T1, T2, ….
WHRE jointures
GROUP BY CUBE (A1, A2, A3, ….,An)

Le résultat:
Total par A1, A2, ……….…, An
Total par A1, A2, ………, An-1
Total par A1, A2
Total par A1
Total par An
Total par An, An-1
Total par An, An-1, ………, A2
Total général
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 347
Bases de Données Décisionnelles
 Les fonction d’agrégation dans les DWs
Fonction CUBE

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 348


Bases de Données Décisionnelles
 Les fonction d’agrégation dans les DWs
Fonction GROUPING SETS
Extension de CUBE qui restreint l’affichage aux sous-totaux seulement.

A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 349

Vous aimerez peut-être aussi