web-dev-qa-db-fra.com

Couverture minimale et dépendances fonctionnelles

Étant donné les dépendances fonctionnelles suivantes, comment calculer la couverture minimale:

A -> B, ABCD -> E, EF -> GH, ACDF -> EG

Dans les notes de cours, il donne la dérivation de la couverture minimale mais je ne la comprends pas.

Par exemple pour se débarrasser de ACDF -> E:

A -> B => AACD -> BACD -> E => ACD -> E => ACDF -> E

Et puis ils disent, de même, nous ne gardons pas ACDF -> G

Et puis je comprends que ABCD -> E est déduit à ACD -> E parce que A -> B, mais je ne comprends pas le formel processus de comment y arriver.

Ma question est donc: quelqu'un peut-il expliquer comment générer la couverture minimale pour un ensemble de dépendances fonctionnelles?

28
kachilous

Pour obtenir la couverture minimale, vous devez effectuer deux étapes. Pour démontrer, je vais d'abord diviser les dépendances en plusieurs (un seul attribut sur le côté droit) pour le rendre plus propre:

A -> B
ABCD -> E
EF -> G
EF -> H
ACDF -> E
ACDF -> G

Les étapes suivantes doit être effectuées dans cet ordre (# 1 puis # 2), sinon vous pouvez obtenir un résultat incorrect.

1) se débarrasser des attributs redondants (réduire les côtés gauche):

Prenez chaque côté gauche et essayez de supprimer un chaque attribut un à la fois, puis essayez de déduire le côté droit (qui n'est désormais qu'un attribut pour toutes les dépendances). Si vous réussissez, vous pouvez ensuite supprimer cette lettre du côté gauche, puis continuer. Notez qu'il peut y avoir plusieurs résultats corrects, cela dépend de l'ordre dans lequel vous effectuez la réduction.

Vous découvrirez que vous pouvez supprimer B de la dépendance ABCD -> E, car ACD -> ABCD (utilisez le premier dep.) et de ABCD -> E. Vous pouvez utiliser le dep complet. vous réduisez actuellement, cela est parfois déroutant au début, mais si vous y réfléchissez, il deviendra clair que vous pouvez le faire.

De même, vous pouvez supprimer F de ACDF -> E, car ACD -> ABCD -> ABCDE -> E (vous pouvez évidemment déduire une seule lettre de la lettre elle-même). Après cette étape, vous obtenez:

A -> B
ACD -> E
EF -> G
EF -> H
ACD -> E
ACDF -> G

Ces règles représentent toujours les mêmes dépendances que l'original. Notez que nous avons maintenant une règle en double ACD -> E. Si vous regardez le tout comme un ensemble (au sens mathématique), vous ne pouvez bien sûr pas avoir le même élément deux fois dans un ensemble. Pour l'instant, je le laisse juste deux fois ici, car la prochaine étape s'en débarrassera de toute façon.

2) se débarrasser des dépendances redondantes

Maintenant, pour chaque règle, essayez de la supprimer et voyez si vous déduisez la même règle en utilisant uniquement les autres. Dans cette étape, vous ne pouvez bien sûr pas utiliser le dep. vous essayez actuellement de supprimer (vous pouvez le faire à l'étape précédente).

Si vous prenez le côté gauche de la première règle A -> B, cachez-le pour l'instant, vous voyez que vous ne pouvez rien déduire de A seul. Cette règle n'est donc pas redondante. Faites de même pour tous les autres. Vous découvrirez que vous pouvez (évidemment) supprimer l'une des règles en double ACD -> E, mais à proprement parler, vous pouvez également utiliser l'algorithme. Masquer une seule des deux mêmes règles, puis prendre le côté gauche (ACD) et utiliser l'autre pour déduire le côté droit. Vous pouvez donc supprimer ACD -> E (une seule fois bien sûr).

Vous verrez également que vous pouvez supprimer ACDF -> G, car ACDF -> ACDFE -> G. Maintenant, le résultat est:

A -> B
EF -> G
EF -> H
ACD -> E

Quelle est la couverture minimale de l'ensemble d'origine.

70
kuba