Fichier de rejeu Close

Indication Close

A propos de... Close

Commentaire Close

Systèmes d'Information

  • Notions mathématiques
  • Calcul relationnel
  • Algèbre relationnelle
  • Langage de requêtes
  • Arbre de requêtes
  • Exercices
  • Introduction
  • Commandes de bases
  • Langage de définition de données (LDD)
  • Langage de manipulation de données (LMD)
  • Types de données
  • Exercice
  • Présentation
  • Calcul relationnel
  • Algèbre relationnelle
  • Division relationnelle
  • Relation
  • Fonction
  • Application
  • Injection
  • Surjection
  • Bijection
  • Association
  • Exemples
  • Dépendances fonctionnelles
  • Décomposition de relations
    • Décomposition d’instances de relations
    • Décomposition et dépendances fonctionnelles
    • Décomposition SPI
    • Exercices
  • Inférence logique
  • Normalisation
  • Aux pays des bières
  • Modélisation
  • Exercices
  • Liste des projets
  • Aux pays des bières
  • Au Tournoi des six nations
  • Salles de concerts
  • Généralités
  • Langage SQL
  • Modèle relationnel
  • Généralités
  • SQL
  • Algèbre relationnelle
  • Synthèse
Index

Archives

  • Site Web
  • Sources reStructuredText
  • EniBook 1.618033988
logo

Crédits

© Your Copyright

Aide

En-tête

MenuContenu
Sommaire,
Téléchargements
Aide sur les outils

Pied de page

ChevronAction
Aller en haut de la page courante
Aller en bas de la page courante
Passer à la page précédente
Passer à la page suivante

Décomposition d’une relation

La décomposition d’une relation permettra d’éviter les redondances et les anomalies de mises à jours qui en découlent.

Cependant il faudra être à même de retrouver les informations qui existaient initialement dans la relation en réalisant une jointure naturelle entre les tables resultant de la décomposition.

Une décomposition de relation sans perte d’information (SPI) mettra en application un théorème de décomposition (théorème de Heath) à partir des dépendances fonctionnelles.

Décomposition d’instances de relations

La décomposition de la relation \(R(A,B,C,D)\) :

R
ABCD
a1b1c1d1
a2b1c2d2
a3b1c1d1

En deux relations \(R_1(A,B)\) et \(R_2(B,C,D)\) :

R1
AB
a1b1
a2b1
a3b1
R2
BCD
b1c1d1
b1c2d2

ne sera pas sans perte d’informations du fait que la jointure naturelle entre les deux relations

  • \(\Join_{[R_1.B=R_2.B]}(R_1, R_2)\) :

ne permet pas de reconstituer la relation de départ.

En effet, l’attribut de jointure (B) ne permet pas de reconstituer la table d’origine puisqu’une valeur de cet attribut ne permet pas de déterminer une seule valeur pour les attributs (C,D)

Avant d’éxécuter la requête de jointure naturelle ci-dessous, combien d’éléments pensez-vous qu’elle donnera comme résultat ?

sql : decomposition-API-R.sql

    
>
Output

                

Interpréteur

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Interpréter le programme

Editeur

MenuRaccouciAction
Ctrl+N Initialiser l'éditeur
Ctrl+O Charger le contenu d'un fichier dans l'éditeur
Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
Ctrl+P Imprimer le contenu de l'éditeur
Ctrl+Z Annuler la dernière modification
Maj+Ctrl+Z Rétablir la modification précedente
Ctrl+F Chercher une expression dans l'éditeur
Maj+Ctrl+F Chercher et remplacer une expression par une autre
F10 Ouvrir une documentation du langage

RaccourciAction
F1 Afficher cette aide
Tab Indenter la sélection
Maj+Tab Désindenter la sélection
Ctrl+A Sélectionner le contenu de l'éditeur
Ctrl+C Copier la sélection dans le presse-papier
Ctrl+V Remplacer la sélection par le contenu du presse-papier
Ctrl+X Supprimer la sélection et la copier dans le presse-papier
Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur

Par contre la décomposition en deux relations \(R_1(A,B,C)\) et \(R_2(A,D)\) :

  • \(\Join_{[R_1.A=R_2.A]}(R_1, R_2)\) :
R1
ABC
a1b1c1
a2b1c2
a3b1c1
R2
AD
a1d1
a2d2
a3d1

permettra de reconstituer la relation de départ par jointure naturelle puisque à chaque valeur de l’attribut A correspond une seule valeur des attributs B,C et de l’attribut D.

Autrement dit :

  • \(A \rightarrow (B,C)\)
  • \(A \rightarrow D\)
sql : decomposition-SPI-R.sql

    
>
Output

                

Interpréteur

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Interpréter le programme

Editeur

MenuRaccouciAction
Ctrl+N Initialiser l'éditeur
Ctrl+O Charger le contenu d'un fichier dans l'éditeur
Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
Ctrl+P Imprimer le contenu de l'éditeur
Ctrl+Z Annuler la dernière modification
Maj+Ctrl+Z Rétablir la modification précedente
Ctrl+F Chercher une expression dans l'éditeur
Maj+Ctrl+F Chercher et remplacer une expression par une autre
F10 Ouvrir une documentation du langage

RaccourciAction
F1 Afficher cette aide
Tab Indenter la sélection
Maj+Tab Désindenter la sélection
Ctrl+A Sélectionner le contenu de l'éditeur
Ctrl+C Copier la sélection dans le presse-papier
Ctrl+V Remplacer la sélection par le contenu du presse-papier
Ctrl+X Supprimer la sélection et la copier dans le presse-papier
Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur

Décomposition et dépendances fonctionnelles

Dans la relation \(R(A,B,C,D)\) :

R
ABCD
a1b1c1d1
a2b1c2d2
a3b1c1d1

Où l’on identifie les dépendances fonctionnelles :

  • \(A \rightarrow (B,C)\)
  • \(C \rightarrow D\)
  • \(D \rightarrow B\)

La décomposition précédente en deux relations \(R_1(A,B,C)\) et \(R_2(A,D)\) :

R1
ABC
a1b1c1
a2b1c2
a3b1c1
R2
AD
a1d1
a2d2
a3d1

ne préservera pas correctement les dépendances entre les informations.

Par contre la décomposition suivante en trois relations :

  • \(R_1(A,B,C)\)
  • \(R_2(C,D)\)
  • \(R_3(D,B)\)

permettra de préserver les dépendances fonctionnelles du schéma relationnel (les attributs de chaque relation est constitué de l’ensemble des attributs des DF).

sql : decomposition-SPI-R1R2R3.sql

    
>
Output

                

Interpréteur

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Interpréter le programme

Editeur

MenuRaccouciAction
Ctrl+N Initialiser l'éditeur
Ctrl+O Charger le contenu d'un fichier dans l'éditeur
Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
Ctrl+P Imprimer le contenu de l'éditeur
Ctrl+Z Annuler la dernière modification
Maj+Ctrl+Z Rétablir la modification précedente
Ctrl+F Chercher une expression dans l'éditeur
Maj+Ctrl+F Chercher et remplacer une expression par une autre
F10 Ouvrir une documentation du langage

RaccourciAction
F1 Afficher cette aide
Tab Indenter la sélection
Maj+Tab Désindenter la sélection
Ctrl+A Sélectionner le contenu de l'éditeur
Ctrl+C Copier la sélection dans le presse-papier
Ctrl+V Remplacer la sélection par le contenu du presse-papier
Ctrl+X Supprimer la sélection et la copier dans le presse-papier
Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur

Dans la création du modèle de données en SQL, les attributs « source » des DF constitueront la clé primaire de la relation et certains attributs de jointure qui apparaissent comme clé primaire dans une autre table pourront être définies comme clé étrangère référençant la clé primaire de la table en question.

Dans le cas précédent on pourra représenter notre modèle de données de la manière suivante :

  • \(R_1(\underline{A},B,\#C)\)
  • \(R_2(\underline{C},\#D)\)
  • \(R_3(\underline{D},B)\)

Où, par convention les clés primaires de tables sont représentés par des attributs soulignés et les clés étrangères sont préfixés par un “hashtag” (#).

Avant d’éxécuter les requêtes suivantes, laquelle d’après vous ne permettra pas de retrouver les informations de la table d’origine \(R(A,B,C,D)\) :

SELECT A,B,C,D  FROM R1 NATURAL JOIN R2;
SELECT A,B,C,D  FROM R1 NATURAL JOIN R3;

A votre avis pour quelle raison ?

sql : decomposition-SPI-R1R2R3.sql

    
>
Output

                

Interpréteur

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Interpréter le programme

Editeur

MenuRaccouciAction
Ctrl+N Initialiser l'éditeur
Ctrl+O Charger le contenu d'un fichier dans l'éditeur
Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
Ctrl+P Imprimer le contenu de l'éditeur
Ctrl+Z Annuler la dernière modification
Maj+Ctrl+Z Rétablir la modification précedente
Ctrl+F Chercher une expression dans l'éditeur
Maj+Ctrl+F Chercher et remplacer une expression par une autre
F10 Ouvrir une documentation du langage

RaccourciAction
F1 Afficher cette aide
Tab Indenter la sélection
Maj+Tab Désindenter la sélection
Ctrl+A Sélectionner le contenu de l'éditeur
Ctrl+C Copier la sélection dans le presse-papier
Ctrl+V Remplacer la sélection par le contenu du presse-papier
Ctrl+X Supprimer la sélection et la copier dans le presse-papier
Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur

Décomposition SPI

Un schéma relationnel \(R(U,F)\) constitué :

  • d’un ensemble d’attributs : \(U=(X,Y,Z)\)
  • d’un ensemble de DF : \(F=\{X \rightarrow Y \}\)

pourra être décomposé sans perte d’informations (SPI) en deux relations :

  • \(R_1(X,Y),R_2(X,Z)\)

en appliquant le théorème de Heath ou théorème de décomposition SPI.

Théorème de Heath

Soit une relation \(R(X,Y,Z)\) où :
  • \((X,Y,Z)\) : ensembles d’attributs disjoints
  • \(X \rightarrow Y\) : une DF de l’ensemble des attributs \(X\) sur l’ensemble des attributs \(Y\)

Alors la décomposition en deux relations :

  • \(R_1(X,Y),R_2(X,Z)\)

où la différence entre les ensembles d’attributs des deux relations :

  • \(Y=\setminus((X,Y),(X,Z))\)

ou :

  • \(Z=\setminus((X,Z),(X,Y))\)

dépend fonctionnellement de l’intersection de ces ensembles d’attributs :

  • \(X=\cap((X,Y),(X,Z))\)

est sans perte d’information (SPI).

Autrement dit :

  • \(\cap((X,Y),(X,Z)) \rightarrow \setminus((X,Y),(X,Z))\)

ou :

  • \(\cap((X,Y),(X,Z)) \rightarrow \setminus((X,Z),(X,Y))\)

Dans le contexte du schéma relationnel ci-dessus la décomposition en deux relations :

  • \(R_1(X,Y),R_2(X,Z)\)

permettra par jointure naturelle sur le groupe d’attributs \(X\) de retrouver les informations de la table d’origine \(R(X,Y,Z)\)

  • \(R(X,Y,Z)= \Join_{[R_1.X=R_2.X]}(R_1(X,Y),R_2(X,Z))\)

puisque l’intersection des groupes d’attributs des deux relations \(R_1,R_2\) :

  • \(X=\cap((X,Y),(X,Z))\)

est le groupe d’attributs source de la dépendance fonctionnelle (\(X \rightarrow Y\))

et la différence des groupes d’attributs des deux relations \(R_1,R_2\) :

  • \(Y=\setminus((X,Y),(X,Z))\)

représente le groupe d’attributs cible de la dépendance fonctionnelle (\(X \rightarrow Y\))

Par contre les décompositions suivantes :

  • \(R_1(X,Y),R_2(Y,Z)\)
  • \(R_1(X,Z),R_2(Y,Z)\)

ne permettront pas de :

  • satisfaire le théorème de décomposition sans perte
  • préserver la DF : \(X \rightarrow Y\)
  • retrouver les informations de la relation initiale \(R\) en effectuant une jointure entre les tables \(R_1,R_2\).

Exercices

Dépendance fonctionnelle dans une relation
  • Question
  • Solution

A partir de l’instance de relation :

R
XYZ
x1y1z1
x2y1z1
x2y2z2
x3y3z2
x3y2z2

Quels dépendances fonctionnelles pouvez-vous identifiez ? Justifiez votre réponse!

Votre réponse :
Texte : inputlines1351.txt

Zone de saisie de texte

ClavierAction
F1Afficher une aide technique
F2Afficher une aide pédagogique
Ctrl-ATout sélectionner
Ctrl-CCopier la sélection dans le presse-papier
Ctrl-VCopier le presse-papier dans la sélection
Ctrl-XCouper la sélection et la copier dans le presse-papier
Ctrl-ZAnnuler la modification
Maj-Ctrl-ZRétablir la modification

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Valider la zone de saisie
Initialiser la zone de saisie
Charger le contenu d'un fichier dans la zone de saisie
Sauvegarder le contenu de la zone de saisie dans un fichier
Imprimer le contenu de la zone de saisie
Une solution possible :

Dans cette relation on ne peut identifier qu’une seule DF :

  • \(Y \rightarrow Z\).

En effet, \(Y\) est le seul attribut pour lequel à chaque valeur correspond une seule et même valeur de l’attribut \(Z\).

Par contre :

  • \(Z \nrightarrow Y\) (à une valeur de \(Z\) correspond 2 valeurs différentes de \(Y\))

    • \(z2 \rightarrow y2\)
    • \(z2 \rightarrow y3\)

De la même manière :

  • \(Y \nrightarrow X\):

    • \(y1 \rightarrow x1\)
    • \(y1 \rightarrow x2\)
  • \(X \nrightarrow Y\).

    • \(x2 \rightarrow y1\)
    • \(x2 \rightarrow y2\)
  • \(X \nrightarrow Z\)

    • \(x2 \rightarrow z1\).
    • \(x2 \rightarrow z2\).
  • \(Z \nrightarrow Y\)

    • \(z1 \rightarrow x1\)
    • \(z1 \rightarrow x2\)
Décomposition de la relation R
  • Question
  • Solution

Créer en SQL l’instance de relation :

R
XYZ
x1y1z1
x2y1z1
x2y2z2
x3y3z2
x3y2z2

Puis créer les tables correspondant à la décomposition de la relation \(R(X,Y,Z)\)

  • \(R_1(X,Y),R_2(Y,Z),R_3(X,Z)\)

en y ajoutant les éléments correspondant de la relation \(R(X,Y,Z)\)

Votre réponse :
sql : essai.sql

    
>
Output

                

Interpréteur

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Interpréter le programme

Editeur

MenuRaccouciAction
Ctrl+N Initialiser l'éditeur
Ctrl+O Charger le contenu d'un fichier dans l'éditeur
Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
Ctrl+P Imprimer le contenu de l'éditeur
Ctrl+Z Annuler la dernière modification
Maj+Ctrl+Z Rétablir la modification précedente
Ctrl+F Chercher une expression dans l'éditeur
Maj+Ctrl+F Chercher et remplacer une expression par une autre
F10 Ouvrir une documentation du langage

RaccourciAction
F1 Afficher cette aide
Tab Indenter la sélection
Maj+Tab Désindenter la sélection
Ctrl+A Sélectionner le contenu de l'éditeur
Ctrl+C Copier la sélection dans le presse-papier
Ctrl+V Remplacer la sélection par le contenu du presse-papier
Ctrl+X Supprimer la sélection et la copier dans le presse-papier
Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
Une solution possible :

Table \(R(X,Y,Z)\)

CREATE TABLE R (
                X  char(2),
                Y  char(2),
                Z  char(2)
               );

INSERT INTO R VALUES('x1','y1','z1');
INSERT INTO R VALUES('x2','y1','z1');
INSERT INTO R VALUES('x2','y2','z2');
INSERT INTO R VALUES('x3','y3','z2');
INSERT INTO R VALUES('x3','y2','z2');

Table \(R_1(X,Y)\)

CREATE TABLE R1 (
                 X  char(2),
                 Y  char(2)
                );

INSERT INTO R1 VALUES('x1','y1');
INSERT INTO R1 VALUES('x2','y1');
INSERT INTO R1 VALUES('x2','y2');
INSERT INTO R1 VALUES('x3','y3');
INSERT INTO R1 VALUES('x3','y2');

Table \(R_2(Y,Z)\)

CREATE TABLE R2 (
                 Y  char(2),
                 Z  char(2)
                );

INSERT INTO R2 VALUES('y1','z1');
INSERT INTO R2 VALUES('y2','z2');
INSERT INTO R2 VALUES('y3','z2');

Table \(R_3(X,Z)\)

CREATE TABLE R3 (
                 X  char(2),
                 Z  char(2)
                );

INSERT INTO R3 VALUES('x1','z1');
INSERT INTO R3 VALUES('x2','z1');
INSERT INTO R3 VALUES('x2','z2');
INSERT INTO R3 VALUES('x3','z2');
Décomposition SPI de la relation R
  • Question
  • Solution

A partir de l’instance de relation :

R
XYZ
x1y1z1
x2y1z1
x2y2z2
x3y3z2
x3y2z2

On défini le schéma relationnel \(R(X,Y,Z)\) avec :

  • \(R(X,Y,Z)\)
  • \(Y \rightarrow Z\)

Et les décompositions possibles de la realtion \(R(X,Y,Z)\) :

  • \(R_1(X,Y),R_2(Y,Z),R_3(X,Z)\)

Sur les trois jointures naturelles possibles :

SELECT X,Y,Z FROM R1 NATURAL JOIN R2;
SELECT X,Y,Z FROM R1 NATURAL JOIN R3;
SELECT X,Y,Z FROM R2 NATURAL JOIN R3;

Laquelle permettra de reconstruire les informations présentes dans la table \(R(X,Y,Z)\) ?

Expliquez pour quelles raisons.

Votre réponse :
sql : spi-create.sql

    
>
Output

                

Interpréteur

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Interpréter le programme

Editeur

MenuRaccouciAction
Ctrl+N Initialiser l'éditeur
Ctrl+O Charger le contenu d'un fichier dans l'éditeur
Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
Ctrl+P Imprimer le contenu de l'éditeur
Ctrl+Z Annuler la dernière modification
Maj+Ctrl+Z Rétablir la modification précedente
Ctrl+F Chercher une expression dans l'éditeur
Maj+Ctrl+F Chercher et remplacer une expression par une autre
F10 Ouvrir une documentation du langage

RaccourciAction
F1 Afficher cette aide
Tab Indenter la sélection
Maj+Tab Désindenter la sélection
Ctrl+A Sélectionner le contenu de l'éditeur
Ctrl+C Copier la sélection dans le presse-papier
Ctrl+V Remplacer la sélection par le contenu du presse-papier
Ctrl+X Supprimer la sélection et la copier dans le presse-papier
Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
Texte : inputlines1360.txt

Zone de saisie de texte

ClavierAction
F1Afficher une aide technique
F2Afficher une aide pédagogique
Ctrl-ATout sélectionner
Ctrl-CCopier la sélection dans le presse-papier
Ctrl-VCopier le presse-papier dans la sélection
Ctrl-XCouper la sélection et la copier dans le presse-papier
Ctrl-ZAnnuler la modification
Maj-Ctrl-ZRétablir la modification

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Valider la zone de saisie
Initialiser la zone de saisie
Charger le contenu d'un fichier dans la zone de saisie
Sauvegarder le contenu de la zone de saisie dans un fichier
Imprimer le contenu de la zone de saisie
Une solution possible :
SELECT X,Y,Z FROM R1 NATURAL JOIN R2;

C’est la seule décomposition pour laquelle la différence des groupes d’attributs des deux relations \(R_1(X,Y), R_2(Y,Z)\)

  • \(Z=\setminus((Y,Z),(X,Y))\)

dépend fonctionnellement de l’intersection de ces mêmes groupes d’attributs :

  • \(Y=\cap((Y,Z),(X,Y)))\)

Du fait de la seule DF du schéma relationnel : \(Y \rightarrow Z\)

Alors que pour les relations \(R_2(Y,Z),R_3(X,Z)\)

  • \(Y=\setminus((Y,Z),(X,Z))\)
  • \(X=\setminus((X,Z),(Y,Z))\)

\(X,Y\) ne dépendent pas fonctionnellement de \(Z\)

  • \(Z=\cap((Y,Z),(X,Z))\)

Ainsi que pour les relations \(R_1(X,Y),R_3(X,Z)\)

  • \(Y=\setminus((X,Y),(X,Z))\)
  • \(Z=\setminus((X,Z),(X,Y))\)

\(Y,Z\) ne dépendent pas fonctionnellement de \(X\)

  • \(X=\cap((X,Y),(X,Z))\)
sql : spi-create.sql

    
>
Output

                

Interpréteur

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Interpréter le programme

Editeur

MenuRaccouciAction
Ctrl+N Initialiser l'éditeur
Ctrl+O Charger le contenu d'un fichier dans l'éditeur
Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
Ctrl+P Imprimer le contenu de l'éditeur
Ctrl+Z Annuler la dernière modification
Maj+Ctrl+Z Rétablir la modification précedente
Ctrl+F Chercher une expression dans l'éditeur
Maj+Ctrl+F Chercher et remplacer une expression par une autre
F10 Ouvrir une documentation du langage

RaccourciAction
F1 Afficher cette aide
Tab Indenter la sélection
Maj+Tab Désindenter la sélection
Ctrl+A Sélectionner le contenu de l'éditeur
Ctrl+C Copier la sélection dans le presse-papier
Ctrl+V Remplacer la sélection par le contenu du presse-papier
Ctrl+X Supprimer la sélection et la copier dans le presse-papier
Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
 
Systèmes d'Information : Décomposition d’une relation, 13 avr. 2023.