Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
MODULE C215
30 juillet 2012
Gérard-Michel Cochard
Session 2 : Méthodologie de fragmentation
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 = AB,
C2 = C,
C3 = DA
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 CD = car on ne peut avoir simultanément numeq = '1' et numeq= '2' et
aussi , CD = D, CD = 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 :
(C1C2C3)(C1C2C)(C1C2C3)(C1C2C3)(C1C2C3)(C1C2C3)(
C1C2C3)(C1C2C3) = "vrai"
2
(AC)(BCD)(AC)(BCA) = (AC)(BCD)(BCA) =
(AC)(ACB)(BCD) = (AC)(BCD)
où nous avons utilisé la distributivité de chacune des lois et par rapport à l'autre, les lois de
Morgan :
Supposons, comme hypothèse supplémentaire, qu'il n'y a que deux équipes de cuisiniers (1 et
2) ce qui implique CD = , C = D, D = C. On a alors les 5 conjonctions significatives de
conditions :
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';
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 :
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 :
On reprend chaque fragment et on regarde quelles sont les requêtes qui les concernent :
Le fragment 1 (CC1) correspond à ABC : Il contient des tuples de R1 (C1 = AB) et des
tuples de R3 (C3 = AC). Le fragment 2 (CC2) correspond à ABC : il contient des tuples
de R1 (C1 = AB) et des tuples de R2 (C2 = C). Le fragment 3 (CC3) correspond à ABC
: il contient des tuples de R3 (C3 = AC). Le fragment 4 (CC4) correspond à (AB)C :
il contient des tuples de R2 (C2 = C). Le fragment 5 (CC5) correspond à AC : 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)}
Schéma de localisation
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 :
On notera que l'on a fait un choix arbitraire pour le fragment 21. Pour les autres fragments, on
cherche à équilibrer les sites :
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 :
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
Donc CC3 et CC4 sont concernées. On cherchera donc dans les fragments correspondants
Modification
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
BC soit CC4. On déplace alors le tuple dans le fragment 4.
C215 - Bases de données avancées | 30/07/2012