Pour illustrer, considérons les règles de gestion au niveau conceptuel :
– Une opération comporte plusieurs détails.
– Un détail d’une opération fait référence exactement à une catégorie.
– Un détail d’une opération est porteur d’un montant et d’une note.
Au niveau relationnel, ces règles donnent lieu à l’ensemble S de dépendances fonctionnelles non triviales suivant, associé à la table DetailOper :
{{OperId, DetailId} → {CategId}, {OperId, DetailId} → {DetailMontant}, {OperId, DetailId} → {DetailNote}}
En conséquence, la relvar DetailOper n’a que la paire {OperId, DetailId} pour clé candidate, et elle respecte la BCNF.
Quand vous dites que la clé est réductible, c’est que pour vous l’ensemble S serait à remplacer par l’ensemble S2 suivant :
{{DetailId} → {OperId}, {DetailId} → {CategId}, {DetailId} → {DetailMontant}, {DetailId} → {DetailNote}}
Mais ceci n’est pas la conséquence des règles de gestion de données : c’est seulement la conséquence d’un artifice proposé par un certain SGBD, à savoir l’auto-incrémentation, qui fait que si l’on examine le contenu des relations, là où l’on s’attend à trouver
a priori plus d’une fois la valeur 1 pour la colonne DetailId de la table DetailOper (c'est-à-dire autant de fois qu’il y a d’opérations),
a posteriori on ne la retrouve en fait qu’une seule fois. La belle affaire ! les règles de gestion des données ne sont pas affectées, qui peut le plus peut le moins et c’est en fait l’inverse qui serait gênant, avoir affaire à une règle de gestion pouvant provoquer des doublons pour la paire {OperId, DetailId}.
Autrement dit, ne confondez pas
modèle et
implémentation. Un modèle définit les objets de façon abstraite, logique,
indépendante, même chose pour les contraintes portant sur les objets (clés candidates, clés étrangères et tout le toutim). L’implémentation est la concrétisation du modèle : l’auto-incrémentation des clés, l’utilisation de l’opérateur MAX, d’un horodateur (
timestamp), d’un GUID, bref toutes ces choses qui dépendent du SGBD et de sa technologie du moment n’ont pas à remettre en cause le niveau logique. En supposant que Tavar ait conçu son modèle en 1970, celui-ci n’aurait pas bougé, alors que sous le capot, son implémentation aurait pu être remaniée au fil des ans et des évolutions technologiques, mais de façon transparente pour les utilisateurs et les programmes. Un modèle est portable tel quel, une implémentation, non.
Partager