Bonsoir Gudina,
Envoyé par
gudina
Ok, donc si je reprends la définition de Zaniolo :
J'ai la relvar {A,B,C} et les 2 dépendances fonctionnelles : {A} -> {B} et {B} -> {A} [...] La relvar est donc en 3FN.
La relvar respecte effectivement la 3FN, mais permettez-moi de pinailler car la BCNF mérite qu’une extrême rigueur soit au rendez-vous. Il serait préférable d’écrire :
les 2 dépendances fonctionnelles : {A} -> {B} et {B} -> {A} sont les seules qui ne sont pas triviales . Il existe en effet d’autres DF, par exemple {A, C} -> {C}, mais elles sont toutes triviales et ne sont donc pas perturbatrices pour le respect de la BCNF selon l’énoncé qu’en donne Zaniolo.
Envoyé par
gudina
ce qui me gêne le plus c'est que dans les solutions proposées à droite à gauche pour cet exercice, en appliquant les méthodes pour vérifier la préservation des données, j'arrive à une perte de données la plupart du temps.
Si vous vous servez du théorème de Heath vous n’aurez pas de perte de données. En revanche, vous pouvez perdre des DF si vous décomposez à tout crin sans tenir compte de la règle de Rissanen.
Envoyé par
gudina
Pour vérifier la préservation des données, j'ai appliqué (R1 ∩ R2) ➔ (R1 — R2) ou (R1 ∩ R2) ➔ (R2 — R1).
Ça n’est jamais que la version académique du théorème de Heath, lequel est ce qui convient finalement le mieux d’un point de vue pratique.
Concernant CPHSEN.
Envoyé par
gudina
Elle est bien en 1FN ?
Elle l’est par définition, sinon CPHSEN ne serait pas une relvar (et ses valeurs ne seraient pas des relations).
Envoyé par
gudina
Selon moi, la clé de cette relation est HE, et donc P par exemple ne dépend pas de la clé, donc la relation n'est pas 2FN.
La paire d’attributs {H, E} est effectivement clé (et c’est la seule). Or une clé détermine fonctionnellement chaque attribut de sa relvar, {P} dépend donc fonctionnellement de {H, E}¹ : {H, E} → {P} contrairement à ce que vous avez écrit. Pour que la 2FN soit violée, il faudrait qu’il existe au moins une DF non triviale dont le déterminant (partie gauche) soit {H} ou {E}, or une telle DF n’existe pas : contrairement à ce que vous avez écrit la 2FN est respectée.
¹ On peut montrer que {H, E} → {P} au moyen des axiomes d’Armstrong :
1. {H, E} → {S} (donné),
2. {H, E} → {S, H} (1 et augmentation),
3. {S, H} → {C} (donné),
4. {H, E} → {C} (2, 3 et transitivité),
5. {C} → {P} (donné),
6. {H, E} → {P} (4, 5 et transitivité).
Envoyé par
gudina
Y-a-t-il une méthode conseillée pour la décomposition en FNBC ?
Oui. La méthode la plus simple et pragmatique consiste à tenir compte de la règle de Rissanen qui binôme avec le théorème de Heath et dont l’objet est de rappeler qu’il faut privilégier la séquence des décompositions selon laquelle on ne perd pas de DF en toute inconscience (une DF est quand même l’expression d’une règle de gestion des données...) Ainsi dans le cas de CPHSEN, l’attribut N n’appartient à aucun déterminant de DF, donc si l’on suit Rissanen, on appliquera le théorème de Heath en commençant avec la DF {C, E} → {N}, puisqu’en l’occurrence aucune DF n’est perdue.
Ainsi CPHSEN est décomposable sans perte de données et sans perte de DF en CEN et CPHSE :
CEN = {C, E, N} ; CPHSE = {C, P, H, S, E}.
CPHSE est-elle décomposable ? Sans perte de données, oui, grâce au théorème de Heath, mais pas sans perte de DF : la décomposition n’est pas recommandée, mais s’il faut s’y résoudre, on commencera par ce qui fait le moins de dégâts... Ainsi, décomposer CPHSE en HPS et CPHE fait perdre deux DF d’un coup (même chose si l’on décompose CPHSE en HES et CPHE) tandis que décomposer CPHSE en CP et CHSE ne fait perdre qu’une DF (même chose si l’on décompose CPHSE en HSC et PHSE), ce qui est moins répréhensible du point de vue des tribunaux relationnels, mais passible quand même d’une réprimande...
Heureusement, dans la réalité de la modélisation des bases de données ces choix sont rares (en tout cas, c’est mon constat après vingt-cinq ans de traque des viols de BCNF et au-delà, dans tous les secteurs d’activité...)
Envoyé par
gudina
La décomposition [CP] [CHS] [HSEN] est donnée pour FNBC mais je ne comprends pas comment [HSEN] est FNBC... La seule DF qui s'applique à cette relation est HE->S. La clé est donc HEN, non ? Du coup S ne dépend que d'une partie de la clé. Mais je sens que je me trompe sur ce raisonnement...
Qui a donné la décomposition comme respectant la BCNF ? Des noms ! La relvar HSEN la viole, puisque, comme vous dites, {H, E, N} est clé candidate (non réductible donc) de la relvar, en vertu de quoi la paire {H, E} qui en est un sous-ensemble strict et qui est le déterminant de la DF {H, E} → {S} n’est pas clé candidate, a fortiori surclé : la BCNF est violée. Vous ne vous êtes pas trompée...
Envoyé par
gudina
Comme on a HS->C et C->P, et que donc par transitivité HS détermine P, je présume que l'on ne peut pas commencer une décomposition FNBC par [HSC] et [CPHEN] ?
Par application du théorème de Heath, à partir de la DF {H, S} → {C} vous produisez la relvar HSC, auquel cas son binôme est PHSEN mais pas CPHEN.
Envoyé par
gudina
En suivant cet algorithme, j'obtiens diverses décompositions, dont certaines avec pertes de données.
Personnellement je me contente du théorème de Heath et de la règle de Rissanen. Quoi qu'il en soit, à partir de {H, P} → {S}, votre décomposition de CPHSEN en HPS = {H, P, S} et HPCEN = {H, P, C, E, N}, préserve les données. En revanche elle ne préserve pas les DF {H, E} → {S} et {H, S} → {C}. Passons par exemple la DF {H, E} → {S} à la moulinette de l’algorithme de Beeri et Honeyman.
Soit S l’ensemble initial des DF :
S = { {C} → {P}, {H, S} → {C}, {H, P} → {S}, {C, E} → {N}, {H, E} → {S} }
Soit G l’ensemble qui est l’union des décompositions proposées :
G = {HPS, HPCEN}
On veut vérifier si la DF {H, E} → {S} est préservée.
1re itération :
Z = {H, E} (déterminant de la DF)
Puis (en faisant participer le 1er élément de G, à savoir HPS) :
Z = {H, E} ∪ (({H, E} ∩ {H, P, S})⁺ ∩ {H, P, S})
Z = {H, E} ∪ ({H}⁺ ∩ {H, P, S})
Z = {H, E} ∪ {H}
Z = {H, E} (on n’a pas gagné grand-chose...)
2e itération (en faisant participer le 2e élément de G, à savoir HPCEN) :
Z = Z ∪ (({H, E} ∩ {H, P, C, E, N})⁺ ∩ {H, P, C, E, N})
Z = {H, E} ∪ ({H, E}⁺ ∩ {H, P, C, E, N})
Z = {H, E} ∪ ({H, E, S, C, P, N} ∩ {H, P, C, E, N})
Z = {H, E} ∪ {H, E, C, P, N}
Z = {H, E, C, P, N}
On a exploité tous les éléments de G : on a terminé. Pour que la DF {H, E} → {S} soit préservée, il faut que le dépendant {S} de la DF appartienne à Z, or ça n’est pas le cas : la décomposition de CPHSEN en HPS = {H, P, S} et HPCEN = {H, P, C, E, N} ne préserve pas la dépendance. De la même façon on peut vérifier que la DF {H, S} → {C} n’est pas préservée.
En ce qui concerne la décomposition de HPCEN = {H, P, C, E, N} en CEN = {C, E, N}, CP = {C, P} et CEHS = {C, E, H, S} : on peut vérifier que la DF {H, E} → {S} n’est pas préservée. La décomposition est moins peccamineuse que la précédente car on ne perd qu’une DF au lieu de deux, mais ça n’est pas l’idéal...
N.B. Pour mémoire et à toutes fins utiles, l’ensemble S des DF de la relvar CPHSEN représente une couverture minimale (démonstration pas bien compliquée).
J'espère que mes commentaires vous ont été utiles et ne vous ont pas traumatisée plus que cela...
Partager