Comment décomposer cette relation en relations 3NF?

Aujourdhui, jai lu sur lalgorithme de décomposition 3NF. Il a dit:

  1. Trouvez une base minimale de F, disons G
  2. Pour chaque FD X → A dans G, utiliser {X, A} comme schéma dune des relations dans la décomposition
  3. Si aucun des ensembles de relations de Step2 nest une super-clé pour R, ajouter une autre relation dont le schéma est une clé pour R

Je veux décomposer cette relation en 3NF.

R(A,B,C) S={A→B, A→C, B→A, B→C, C→A, C→ B, AB→ C, BC→A, AC→B, A→BC, B→AC, C→AB} 

Comme nous pouvons le voir, la clé de R est: {A},{B},{C}

S a plusieurs bases minimales, telles que:

  1. {A→B, B→A, B→C, C→B}; et
  2. {A→B, B→C, C→A}

Le problème est que si nous utilisons la 1ère base minimale, alors nous décomposons R en 2 relations : (A, B), (B, C).

Si nous utilisons la 2ème base minimale, R se transforme en: (A, B), (B, C), (C, A).

Ma question est: laquelle est la bonne?

Réponse

Tout dabord, notez que le la relation dorigine est déjà en troisième forme normale, puisque chaque attribut est premier (chaque attribut est une clé, en fait), de sorte que la définition de 3NF est respectée.

Ensuite, notez que lalgorithme est incomplet. Les étapes sont:

  1. Trouver une base minimale de F, disons G
  2. Pour chaque groupe de FD avec le même partie gauche, X → A 1 , X → A 2 , …, X → A n dans G, utilisez {X, A 1 , A 2 , …, A n } comme schéma de lune des relations dans la décomposition
  3. Supprimer toutes les relations dont les attributs sont contenus dans une autre relation.
  4. Si aucun des ensembles de relations de létape 2 nest une super-clé pour R, ajoutez une autre relation dont le schéma est une clé pour R.

Donc dans le premier cas, vous obtenez trois groupes de dépendances:

A → B B → A B → C C → B 

qui produisent trois relations, R 1 (A, B), R 2 (A, B, C), R 3 (B, C), et, en suivant lalgorithme, vous obtenez comme résultat uniquement R 2 , puisque les deux autres contiennent des attributs.

Vous avez donc deux sorties différentes de lalgorithme, en fonction de la base minimale utilisée (qui à son tour dépend de lordre dans lequel vous considérez les dépendances lors du calcul de la couverture minimale).

Donc, la réponse à votre question:

qui lun est correct?

est: les deux sont corrects , puisque les deux satisfont à la définition du 3NF. Vous venez de découvrir que lalgorithme de synthèse pour décomposer une relation dans 3NF peut produire différentes solutions.

Une autre question est: laquelle est «meilleure», et bien sûr la solution avec une seule relation est «meilleure» , puisque vous navez pas besoin de joindre des tables lorsque vous faites des requêtes.

Bien sûr, si lon pouvait vérifier au début si la relation est déjà dans 3NF, alors il peut éviter dappliquer lalgorithme. Mais cela en général ne peut pas être fait, car la vérification nécessite le calcul exponentiel de toutes les clés, pour trouver les attributs premiers de la relation.

Commentaires

  • Merci pour votre réponse! Mais comment avez-vous produit 3 relations: R1 (A, B), R2 (A, B, C), R3 (B, C)? Je pensais quil navait que R1 et R3. R2 est la relation dorigine.
  • Pour la deuxième étape de lalgorithme correct, il y a deux dépendances avec la même partie gauche, B → A et B → C, vous devez donc mettre tous les attributs ensemble et obtenir la relation (A, B, C). Cest juste dicté par lalgorithme.
  • Wow, je ne savais ' pour cette deuxième étape. Jai pris lalgorithme dun livre nommé A First Course in Database System - 3rd edition. Lequel dois-je suivre maintenant?
  • Cet algorithme nest pas complet. Tous les principaux livres sur les bases de données ont lalgorithme que jai décrit dans la réponse.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *