Le dîner était très bon, aussi je somnole un peu et j'espère ne pas raconter de bêtises...
Avant de passer au 4e point, j'en reviens à votre 1er message :
Je ne vois pas 6 relations, mais seulement 5 et j'ai mon idée sur le piège qui se cache sous la coquille, qu'elle soit volontaire ou non, mais passons (à l'occasion, il faudrait remplacer le terme « relation » par celui de « relvar » (variable relationnelle), car une relation est une valeur prise par une variable relationnelle, mais une fois de plus, passons).
Comme on l’a vu, cette décomposition préserve les données (lossless join decomposition). Mais préserve-t-elle les dépendances fonctionnelles, c'est-à-dire les règles de gestion des données, point essentiel !
Pour apporter une réponse, comme je l’ai déjà écrit, on est obligé d’en passer par l’algorithme décrit au paragraphe « E.7.2. Préservation des dépendances fonctionnelles » de l’article.
Pour résumer, on utilise l’algorithme suivant :
Pour chaque dépendance fonctionnelle DFx X -> Y appartenant à F Z= X Pour chaque Projection Ri Z = Z ∪ ((X ∩ Ri)+ ∩ Ri) par rapport à F
Où Z représente un ensemble d’attributs et Ri une des « relations » R1, R2, R3, R4, R5.
Illustrons...
On reprend l’ensemble F initial (pour réduire le nombre d’itérations, on pourrait utiliser une couverture irréductible, mais on n’est pas des feignants...) :
F = { {A} -> {D}, {A} -> {E}, {C, E, D} -> {B}, {D} -> {E}, {B} -> {E}, {C, E} -> {D}, {C, D} -> {B} }
Considérons la DF {A} -> {D}. La paire {A, D} n’appartient à aucune des projections R1 à R5, aussi doit-on être en mesure d’inférer cette DF. Pour cela utilisons l’algorithme et effectuons les intersections, en commençant par R1 = {A, C} :
On n’a rien ramassé au passage...Z = {A} = {A} ∪ (({A} ∩ {A, C})+ ∩ {A, C}) = {A} ∪ ({A}+ ∩ {A, C}) = {A} ∪ ({A, D, E} ∩ {A, C}) = {A} ∪ {A} = {A}
Essayons avec la projection suivante, R2 = {B, E} :
Ça n’est pas terrible...Z = {A} = {A} ∪ (({A} ∩ {B, E})+ ∩ {B, E}) = {A} ∪ (Ø ∩ {B, E}) = {A}
Essayons avec la projection suivante, R3 = {A, E} :
Z s’est un peu enrichi, mais on n’a pas inféré {A} -> {D}...Z = {A} = {A} ∪ (({A} ∩ {A, E})+ ∩ {A, E}) = {A} ∪ ({A}+ ∩ {A, E}) = {A} ∪ ({A, D, E} ∩ {A, E}) = {A} ∪ {A, E} = {A, E}
Essayons avec la projection suivante, R4 = {C, E, D} :
Bof...Z = {A, E} = {A, E} ∪ (({A, E} ∩ {C, E, D})+ ∩ {C, E, D}) = {A, E} ∪ ({E}+ ∩ {C, E, D}) = {A, E} ∪ ({E} ∩ {A, E}) = {A, E} ∪ {E} = {A, E}
Essayons avec la projection suivante, R5 = {C, D, B} :
On repartirait pour un 2e tour de manège avec les projections R1 à R5 pour essayer de retrouver la DF {A} -> {D} que ça ne donnerait toujours rien...Z = {A, E} = {A, E} ∪ (({A, E} ∩ {C, D, B})+ ∩ {{C, D, B}) = {A, E} ∪ (Ø ∩ {C, D, B}) = {A, E}
Conclusion :
La décomposition de R en R1{A, C}, R2 {B, E}, R3{A, E}, R4{C, E, D}, R5{C, D, B} ne permet pas d’inférer la DF {A} -> {D}, et même si elle préserve la décomposition des données comme on l’a montré dans un message précédent, elle ne préserve pas les dépendances fonctionnelles : c’est affreux, affreux...
Sur ces paroles peu rassurantes, je vais m'occuper du 4e point
Partager