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
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
https://
coursbenmakhlouf.me.
A.Benmakhlouf 8 ma/
Introduction
Bonne représentation des données
A.Benmakhlouf 10 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Une 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
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
A.Benmakhlouf 14 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Schéma de Relation & Schéma de BDR
A.Benmakhlouf 15 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Règle du modèle relationnelle
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
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
A.Benmakhlouf 18 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Règle du modèle relationnelle
Contre Exemple:
Commandes(N°Commande, DateComande, Datelivraison, CodeClient,
nomClient)
Notion de Normalisation
Chaque relation dans le schéma de BDD doit être normalisée suivant trois FN:
A.Benmakhlouf 20 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Règle du modèle relationnelle
Notion de Normalisation
Contre Exemple:
A.Benmakhlouf 21 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Règle du modèle relationnelle
Notion de Normalisation
Contre Exemple:
A.Benmakhlouf 22 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Règle du modèle relationnelle
Notion de Normalisation
A.Benmakhlouf 23 https://coursbenmakhlouf.me.ma/
Modèle Relationnel
Règle du modèle relationnelle
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
• 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 ;
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,
A.Benmakhlouf 26 https://coursbenmakhlouf.me.ma/
Algèbre Relationnelle
https://
coursbenmakhlouf.me.
A.Benmakhlouf 27 ma/
Algèbre Relationnelle
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
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
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 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)
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.
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) :
https://
coursbenmakhlouf.me.
A.Benmakhlouf 42 ma/
Manipulation et Interrogation des BDD
Langage SQL
A.Benmakhlouf 43 https://coursbenmakhlouf.me.ma/
Manipulation et Interrogation des BDD
Langage SQL (Définition de données) (LDD)
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.
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 46
Manipulation et Interrogation des BDD
Langage SQL (type de données chaine de caractère)
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)
Exemple: soit l’attribut Champ_Date dont les valeurs sont des dates:
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.
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 49
Manipulation et Interrogation des BDD
Langage SQL (type incrémentation auto)
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 50
Manipulation et Interrogation des BDD
Langage SQL (Définition de données) (LDD)
create table R1(A number(2,0) PRIMARY KEY, b varchar2(10),c DATE not null);
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
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));
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 54
Manipulation et Interrogation des BDD
Langage SQL (Définition de données) (LDD)
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
https://
coursbenmakhlouf.me.
A.Benmakhlouf 56 ma/
Manipulation et Interrogation des BDD
Langage SQL (Manipulation de données) (LMD)
La commande UPDATE
UPDATE Produit SET Prix = Prix*(1+0.05), Stock=Stock+6
WHERE RefProduit=‘’A210’’;
La commande SELECT
- 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
Exemple
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
https://
coursbenmakhlouf.me.
A.Benmakhlouf 60 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)
La commande SELECT
Exemple
SELECT RefProduit, Désignation, PrixUnitaire
FROM Produit
WHERE PrixUnitaire <=120
La commande SELECT
La commande SELECT
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
https://
coursbenmakhlouf.me.
A.Benmakhlouf 64 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)
La commande SELECT
https://
coursbenmakhlouf.me.
A.Benmakhlouf 65 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)
La commande SELECT
https://
coursbenmakhlouf.me.
A.Benmakhlouf 66 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)
La commande SELECT
https://
coursbenmakhlouf.me.
A.Benmakhlouf 67 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)
La commande SELECT
https://
coursbenmakhlouf.me.
A.Benmakhlouf 68 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)
La commande SELECT
https://
coursbenmakhlouf.me.
A.Benmakhlouf 69 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)
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
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.
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
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)
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
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)
https://
coursbenmakhlouf.me.
A.Benmakhlouf 76 ma/
Manipulation et Interrogation des BDD
Langage SQL (Interrogation de données) (LID)
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.
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
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
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 83
Optimisation des Requêtes SQL
1. L’optimisation par réécriture Algébrique des Requêtes
?????
Comment le SGBD va obtenir ces
informations (execute les requêtes)
A.Benmakhlouf https://coursbenmakhlouf.me.ma/ 86
La décomposition Traduction Algébrique :
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)
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 ?
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
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)
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))
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.
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.
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
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)
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
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é.
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]
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)
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
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
1958 1960 1977 1979 1986 1987 1989 1990 1993 1997
1999
1995 2000
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
119
L’indexation des fichiers Index bitmap
revient à sélectionner dans la table de l’index bitmap les rowid ayant Rabat = 1
121
L’indexation des fichiers Index bitmap
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).
Conclusion;
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.
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)
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
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:
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.
Méthode FAST
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. :
139
L’optimisation : Les Vues Matérialisées
Les méthodes de rafraichissement de la VM
Méthode FAST
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
143
Les méthodes de rafraichissement de la VM
Méthode FAST
144
Les méthodes de rafraichissement de la VM
Méthode FAST
145
L’optimisation : Les Vues Matérialisées
Méthode COMPLET
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.
146
L’optimisation : Les Vues Matérialisées
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
PL/SQL
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
https://
coursbenmakhlouf.me.
A.Benmakhlouf 160 ma/
PL/SQL
Les Variables
https://
coursbenmakhlouf.me.
A.Benmakhlouf 161 ma/
PL/SQL
Les Variables
DECLARE
X Number(2, 0) := 12;
Y varchar2(10) := ‘Ordinateur’;
BEGIN
….
….
END
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;
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
Syntaxe:
DECLARE
NomVariable Nomtable%ROWTYPE;
….;
BEGIN
…..
END
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
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.
Les Tables imbriquées doivent être initialisée et doivent être étendues pour
ajouter un élément.
nom-variable nom_Type;
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
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;
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:
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.
BEGIN
…
WHILE <condition>
LOOP
Instructions;
END LOOP;
….
END
BEGIN
…
FOR indice IN [REVERSE] exp1..exp2
LOOP
Instructions;
END LOOP;
…..
END;
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
Non
Oui
Vide
DECLARE OPEN FETCH CLOSE
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
Syntaxe :
CREATE [OR REPLACE] PROCEDURE nom_proc
(param1 [type][mode] type_donnée,
param2 [type][mode] type_donnée,
….)
IS
Bloc PL/SQL
Exemple2: créer une procédure qui permet d’insérer une ligne dans une table :
PRODUIT(REFPRODUIT, NOMPRODUIT, PRIX, STOCK).
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).
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
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.
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.
Syntaxe :
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.
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.
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,
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;
Exercice :
La Procédure RAISE_APPLICATION_ERROR ( )
La syntaxe générale est :
RAISE_APPLICATION_ERROR (error_number, error_message);
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.
Un trigger est une fonction qui doit être exécutée Avant ou après les
opérations INSERT, UPDATE, DELETE (BEFORE, AFTER).
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).
IF INSERTING THEN
...
ELSIF UPDATING THEN
...
ELSIF DELETING THEN
...
Syntaxe :
Exemple :
BDD
BDD1
BDD2
BDD3
Exercice:
III. Fragmentation
1. Type de fragmentation
2. Définition de la fragmentation
IV. Allocation
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 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.
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.
Répartition des objets dans les différents serveur objet par objet.
Toutes Les occurrences d’une classe appartient ainsi au même
fragment.
Exercice
Bank1.clients :
Bank1.Comptes : Bank1.clients ⋉ comptes
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;
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 245
Bank1.clients :
Bank2.clients :
Bank3.clients :
246
A.Benmakhlouf https://coursbenmakhlouf.me.ma/
La fragmentation peut se faire:
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));
248
A.Benmakhlouf https://coursbenmakhlouf.me.ma/
Bases de Données Réparties
Définition de la fragmentation
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) .
254
Bases de Données Réparties
Processus d’allocation des fragments.
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
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.
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.
{
¿ 𝐶𝑜𝑚𝑝𝑡𝑒𝑠 3=𝜎 ( 𝑉𝑖𝑙𝑙𝑒𝐶𝑙𝑖𝑒𝑛𝑡≠ 𝐶𝑎𝑠𝑎𝑏𝑙𝑎𝑛𝑐𝑎 𝑂𝑅𝑆𝑜𝑙𝑑𝑒 ≥0 ) ( 𝐶𝑜𝑚𝑝𝑡𝑒𝑠 )
′ ′
𝐴𝑁𝐷
𝑩𝑫𝑫 3 : (𝑉𝑖𝑙𝑙𝑒𝐶𝑙𝑖𝑒𝑛𝑡 ≠ 𝑅𝑎𝑏𝑎𝑡 ′ 𝑂𝑅𝑆𝑜𝑙𝑑𝑒<0)
′
¿
¿ 𝐶𝑙𝑖𝑒𝑛𝑡 3=( 𝐶𝑙𝑖𝑒𝑛𝑡𝑠 ⋉ 𝐶𝑜𝑚𝑝𝑡𝑒𝑠 3 )
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
syntaxe :
CREATE MATERIALIZED VIEW TableCopie
[REFRESH {FAST|COMPLETE|FORCE}
[ON COMMIT|ON DEMAND]] [FOR UPDATE]
AS
Select * from Table
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.
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. :
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
267
Bases de Données Réparties
Processus d’allocation des fragments.
Réplication Asynchrone
268
Bases de Données Réparties
Processus d’allocation des fragments.
Réplication Asynchrone
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.
270
Bases de Données Réparties
Processus d’allocation des fragments.
Réplication Asynchrone
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
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.
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.
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
Requêtes de d’Ecriture
- Insertion
- Suppression
- Modification
283
Bases de Données Réparties
Optimisation des requêtes Réparties.
Requêtes de Lecture
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 ...).
284
Bases de Données Réparties
Optimisation des requêtes Réparties.
285
Bases de Données Réparties
Optimisation des requêtes Réparties.
286
Bases de Données Réparties
Optimisation des requêtes Réparties.
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.
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.
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.
291
Bases de Données Réparties
Optimisation des requêtes Réparties.
292
Bases de Données Réparties
Optimisation des requêtes Réparties.
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.
294
Bases de Données Réparties
Optimisation des requêtes Réparties.
L’index bitmap
La base de données stocke une image bitmap pour chaque clé d'index
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.
7 1
8 1
298
Bases de Données Réparties
Optimisation des requêtes dans une BDD centrale.
Question traitée : Quel sont les clients qui ont commandé le
produit « Tarte au sucre » avec une quantité par commande >20
Clt = Client
Cde = Commande
DC = DétailsCommande
Ref = RéfProduit
Désig = Désignation
Qt = Quantité
- Pour effectuer ces opérations il faut transférer entre les sites une quantité
minimale de données.
Optimisation globale.
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
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.
Syntaxe :
CREATE [SHARED] [PUBLIC] DATABASE LINK nomLien CONNECT TO
compteUtilisateur IDENTIFY BY motDePasse USING
Host:serveur/nomService
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.
CREATE [PUBLIC] SYNONYM BDD_SITE2.Table
FOR BDD_SITE2.Table@LINKSITE2.
SELECT * FROM BDD_SITE2
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).
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
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)
337
Bases de Données Décisionnelles
Construction d’un Cubes de données
Exemple:
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
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
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