Vous êtes sur la page 1sur 8

CONSORTIUM INTERNATIONAL E-MIAGE

MODULE C215

BASES DE DONNEES AVANCEES

UF2 – Bases de données réparties


Session 2 – Méthodologie de fragmentation

MASTER METHODES INFORMATIQUES APPLIQUEES A LA GESTION DES ENTREPRISES

30 juillet 2012

Gérard-Michel Cochard
Session 2 : Méthodologie de fragmentation

Méthodologie de fragmentation horizontale


Pour étudier comment décomposer une base de données en fragments horizontaux on se basera sur
un exemple concret (et exotique).

exemple : On considère la table CUISINIER des exemples précédents que l'on se propose de
répartir en fragments horizontaux. On commencera par se baser sur les requêtes les plus
fréquentes :

• R1 : SELECT numero, numeq FROM CUISINIER WHERE prenom = 'Jean' AND nom
LIKE '%R%';
• R2 : SELECT * FROM CUISINIER WHERE numeq = '1';
• R3 : SELECT numero, nom FROM CUISINIER WHERE numeq = '2' AND prenom =
'Jean';

Pour effectuer la fragmentation horizontale on se base sur les critères de recherche, c'est à
C215 - Bases de données avancées | 30/07/2012

dire les conditions exprimées dans les "WHERE" des ordres SQL.

On a
C1 = AB,
C2 = C,
C3 = DA
où  désigne le "ET LOGIQUE" et A, B, C, D représentent les prédicats suivants :
A : prenom = 'Jean'
B : nom LIKE '%R%'
C : numeq = '1'
D : numeq = '2'

Les opérations logiques ET LOGIQUE (  ) et OU LOGIQUE ( ) sont définies par les tables de
vérité suivantes :

1
où  signifie "Faux" (ou vide de sens) et 1 "Vrai".

On a évidemment CD =  car on ne peut avoir simultanément numeq = '1' et numeq= '2' et
aussi , CD = D, CD = C où C et D désignent les contraires de C et D.

A partir des conditions Ci, on peut construire l'ensemble des conjonctions CCj de conditions :

CC = { Ci* pour i = 1,n et Ci* = Ci ou Ci}

CC = {C1C2C3, C1C2C3, C1C2C3, C1C2C3, C1C2C3, C1C2C3,


C1C2C3, C1C2C3}

On laisse au lecteur le soin de vérifier que

(C1C2C3)(C1C2C)(C1C2C3)(C1C2C3)(C1C2C3)(C1C2C3)(
C1C2C3)(C1C2C3) = "vrai"

Evaluons chacun des termes :

C1C2C3 = ABCD A = AB A = 

C1C2C3 = (AB)CDA = (AB)A = 

C1C2C3 = ABCDA = ABDA = ABD

C1C2C3 = ABC(D A) = ABC(DA) = (ABCD)(ABCA) =


(ABC) = ABC
C215 - Bases de données avancées | 30/07/2012
C1C2C3 = (AB)CDA = (AB)DA = (AB)DA = (ADA)(BDA)
= (ABD) = ABD

C1C2C3 = ABC(DA) = (ABCD)(ABCA) = (ABCD) =


ABCD

C1C2C3 = (AB)C(DA) = (AB)[(CD)(CA)] =


(AB)[C(CA)] = (AB)C

CC2C3 = (AB)C(DA) = (AB)[(CD)(CA)] =


[(AB)(CD)][(AB)(CA)] =
[(ACD)(BCD)][(ACA)(BCA)] =

2
(AC)(BCD)(AC)(BCA) = (AC)(BCD)(BCA) =
(AC)(ACB)(BCD) = (AC)(BCD)

où nous avons utilisé la distributivité de chacune des lois  et  par rapport à l'autre, les lois de
Morgan :

(XY) = (X  Y)


(XY) =( X Y)

et aussi :X(XY) = X (à vérifier avec les tables de vérité).

Supposons, comme hypothèse supplémentaire, qu'il n'y a que deux équipes de cuisiniers (1 et
2) ce qui implique CD = , C = D, D = C. On a alors les 5 conjonctions significatives de
conditions :

CC = C1C2C3 = ABD


CC2 = C1C2C3 = ABC
CC3 = C1C2C3 = ABD
CC4 = C1C2C3 = (AB)C
CC5 = C1C2C3 = AD

Ces 5 conditions définissent les fragments horizontaux (exclusifs) :


C215 - Bases de données avancées | 30/07/2012

Méthodologie de fragmentation verticale


Pour la fragmentation horizontale, on s'intéresse à ce que l'on cherche comme valeurs des attributs,
c'est à dire aux projections des relations sur certains attributs. Nous allons reprendre l'exemple
précédent pour expliciter concrètement la méthodologie de fragmentation verticale .

3
exemple : Reprenons les requêtes les plus fréquentes :

• R1 : SELECT numero, numeq FROM CUISINIER WHERE prenom = 'Jean' AND nom
LIKE '%R%';
• R2 : SELECT * FROM CUISINIER WHERE numeq = '1';
• R3 : SELECT numero, nom FROM CUISINIER WHERE numeq = '2' AND prenom =
'Jean';

Les projections sont :

P1 : (numero, numeq)
P3 : (numero, nom)

P2 n'est pas considérée comme une projection car tous les attributs sont demandés dans la
requête R2 (en fait on projette tout). A partir de P1 et P3, on construit l'ensemble IP des
intersections ()de projections :

IP = { Pj* pour j = 1,n et Pj* = Pj ou ~Pj}

où ~Pj désigne le complément de Pj sur l'ensemble des attributs de la table CUISINIER avec
l'incorporation obligatoire de la clé numero :

~P1 = (numero, nom, prenom)


~P3 = (numero, prenom, numeq)

Concrètement IP = {P1P1, ~P1 ~P1, P3P3, ~P3~P3, P1P3, P1~P3, ~P1P3,


~P1~P3} avec

P1P1 = P1 = (numero, numeq)


~P1~P1 = ~P1 = (numero, nom, prenom)
P3P3 = P3 = (numero, nom)
~P3~P3 = ~P3 = (numero, prenom, numeq)
P1P3 =(numero)
~P1P3 = (numero, nom)
P1~P3 = (numero, numeq)
C215 - Bases de données avancées | 30/07/2012
~P1~P3 = (numero, prenom)

On reprend chaque fragment et on regarde quelles sont les requêtes qui les concernent :

Le fragment 1 (CC1) correspond à ABC : Il contient des tuples de R1 (C1 = AB) et des
tuples de R3 (C3 = AC). Le fragment 2 (CC2) correspond à ABC : il contient des tuples
de R1 (C1 = AB) et des tuples de R2 (C2 = C). Le fragment 3 (CC3) correspond à ABC
: il contient des tuples de R3 (C3 = AC). Le fragment 4 (CC4) correspond à (AB)C :
il contient des tuples de R2 (C2 = C). Le fragment 5 (CC5) correspond à AC : il ne
contient aucun tuple des requêtes.

• Le fragment 1 est concerné par les requêtes R1 et R3, donc par tous les éléments de
l'ensemble IP construits à partir de P1 et P3, soit P1  P3, ~P1  P3, P1  ~P3,
~P1  ~P3
IP1 = {(numero), (numero, nom), (numero, numeq), (numero, prenom)}

4
• Le fragment 2 est concerné par les requêtes R1 et R2, donc seulement par les
projections P1 et ~P1, donc par les éléments de IP P1  P1 = P1 et ~P1  ~P1 =
~P1, donc :
IP2 = {(numero, numeq), (numero, nom, prenom)}
• Le fragment 3 est concerné par la requête R3 donc seulement par les projections P3 et
~P3, donc par les éléments de IP P3  P3 = P3 et ~P3  ~P3 = ~P3, donc :
IP3 = {(numero, nom), (numero, prenom, numeq)}
• Le fragment 4 est concerné par la requête R2, donc par tous les attributs :
IP4 = {(numero, nom, prenom, numeq)}
• Le fragment 5 n'est concerné par aucune des requêtes, donc par tous les attributs :
IP5 = {(numero, nom, prenom, numeq)}

On déduit de ces considérations les divers fragments :


C215 - Bases de données avancées | 30/07/2012

Le fragment 11 n'est d'aucune utilité et on peut le négliger.

Schéma de localisation

Pour définir le schéma de localisation, on recherche

1) d'où sont émises les requêtes (priorité 1)


2) d'où sont faites les mises à jour (priorité 2)

5
exemple : reprenons l'exemple précédent et supposons que deux sites soient pris en
considération. Supposons que la requête R1 soit émise de A ou B, que la requête R2 soit
émise de A seulement et que la requête R3 soit émise de B seulement. Pour les trois requêtes,
les fragments suivants sont concernés :

R1 --> fragment 13, fragment 21


R2 --> fragment 21, fragment 22, fragment 41
R3 --> fragment 12, fragment 31

On fera donc les affectations

site A : fragment 13, fragment 21, fragment 22, fragment 41


site B : fragment 12, fragment 31

On notera que l'on a fait un choix arbitraire pour le fragment 21. Pour les autres fragments, on
cherche à équilibrer les sites :

site A : fragment 11, fragment 51


site B : fragment 14, fragment 32

On peut alors constater que certains fragments peuvent être recombinés :

site A : fragment 11, fragment 13, fragment 2, fragment 4, fragment 5


site B : fragment 12, fragment 14, fragment 3

Mises à jour
Les mises à jour consistent en les trois opérations d'insertion (INSERT), de suppression (DELETE) et
de modification (UPDATE).

Insertion
C215 - Bases de données avancées | 30/07/2012
exemple : insérer un nouveau cuisinier dans la table CUISINIER :

INSERT INTO CUISINIER VALUES(21, 'DUBOUT', 'Jean', 2);

Le fragment horizontal concerné peut être retrouvé avec les CC (pour le cas présent, il s'agit
de CC3) ; ensuite il faut insérer le tuple dans tous les fragments verticaux.

6
Suppression

exemple : suppression du cuisinier Jean DUBOUT :

DELETE FROM CUISINIER WHERE nom = 'DUBOUT' AND prenom = 'Jean' ;

On utilise "au mieux" les conditions CC :

-- pas de "R' dans le nom : B


-- prenom = 'Jean' : A

Donc CC3 et CC4 sont concernées. On cherchera donc dans les fragments correspondants

exemple : supprimer le cuisinier de numéro 21

DELETE FROM CUISINIER WHERE numero = 21 ;

On est ici obligé de chercher dans tous les segments

Modification

exemple : modification de l'affectation du cuisinier DUBOUT

UPDATE CUISINIER SET numeq = 1 WHERE nom = 'DUBOUT' ;

La condition de sélection est B ; il faut donc chercher dans les fragments concernés par CC3,
CC4, CC5. On trouve l'enregistrement dans le fragment 3. On modifie puis on vérifie que la CC
est toujours vérifiée ; ce n'est plus le cas ici puisque numeq = 1. La nouvelle condition est
BC soit CC4. On déplace alors le tuple dans le fragment 4.
C215 - Bases de données avancées | 30/07/2012