laowantong / mocodo

Modélisation Conceptuelle de Données. Nickel. Ni souris.
https://www.mocodo.net
MIT License
181 stars 49 forks source link

Traitement de l'équivalent des associations n-aires en notation Look Across #88

Closed laowantong closed 1 year ago

laowantong commented 1 year ago

Ce qui suit est une traduction en français, une adaptation à la syntaxe de Mocodo et une discussion de quatre exemples d'association ternaire tirés de Toby J. Teorey, Sam S. Lightstone, Tom Nadeau, H.V. Jagadish, Database Modeling and Design - Logical Design, 5th Edition - February 10, 2011 (Elsevier), pp 29-30.

Les quatre combinaisons de cardinalités d'une association ternaire en notation LA

Triplet NNN (équivalent à la notation LH de Merise : ok)

image

image

Triplet 1NN (agrégat : ok)

image

Chaque ingénieur travaillant sur un projet particulier a exactement un responsable, mais chaque responsable d'un projet peut gérer plusieurs ingénieurs, et chaque responsable d'un ingénieur peut gérer cet ingénieur sur plusieurs projets.

image

Triplet 11N (erroné)

image

Chaque employé affecté à un projet travaille sur un seul site pour ce projet, mais peut se trouver sur différents sites pour différents projets. Sur un site donné, un salarié ne travaille que sur un seul projet. Sur un site donné, il peut y avoir plusieurs employés affectés à un projet donné.

image

Problèmes.

Triplet 111 (erroné)

image

Un technicien utilise exactement un carnet pour chaque projet. Chaque carnet appartient à un technicien pour chaque projet. Notez qu'un technicien peut toujours travailler sur plusieurs projets et gérer différents carnets pour différents projets.

image

Problèmes.

Discussion

Aspect sémantique

Lorsque j'ai introduit la notation /1N, j'y voyais une façon d'indiquer que l'identifiant qui migrerait par-là se verrait au passage retirer son caractère identifiant. Ça marchait quand une seule des cardinalités 1N était marquée ainsi, mais à partir de deux, la clé primaire de la table associative réduisait comme une peau de chagrin, ce qui n'avait aucun sens.

En étudiant un peu la notation Look Across, de loin la plus répandue en dehors de la sphère francophone, j'ai réalisé que ma façon de voir était fausse, et qu'une autre s'imposait naturellement :

Supposons une association $n$-aire $A$ exclusivement entourée de 1N (ou 0N). Soient $E_1$, $E_2$, ..., $E_n$ les entités mises en jeu, et $k_1, k_2$, ..., $k_n$ leurs identifiants respectifs. Alors, noter /1N la cardinalité de la patte de $E_i$ dénote l'existence de la dépendance fonctionnelle suivante : $(k1, ..., k{i-1}, k_{i+1}, ..., k_n) \implies k_i$, autrement dit : que $(k1, ..., k{i-1}, k_{i+1}, ..., k_n)$ est une clé candidate de la table $A$.

La notation se généralise alors parfaitement à plusieurs cardinalités /1N : chacune créera une nouvelle dépendance fonctionnelle, autrement dit, une nouvelle clé candidate.

Le concepteur peut spécifier à coût zéro quelle clé candidate sera élue clé primaire. Il lui suffit pour cela de placer en tête de la liste des entités mises en jeu par $A$ celle dont l'identifiant ne doit pas entrer dans la clé primaire. Si c'est $E_1$, la clé primaire sera automatiquement $(k_2, ..., k_n)$.

Dans tous les cas, les clés alternatives se verraient traduites aux niveaux relationnel et physique par des contraintes d'unicité.

Aspect graphique

Chaque /1N doit donner lieu au tracé d'une enveloppe d'agrégat distincte (ce n'est pas le cas actuellement). Il faut alors veiller à élargir ou rétrécir chacune des enveloppes pour éviter les chevauchements. Jouer sur l'opacité et éventuellement les couleurs de fond peut aussi améliorer la lisibilité.

Si le MCD comporte au moins une contrainte CIF, cette visualisation est automatiquement désactivée (c'est le cas actuellement). Ainsi, l'exemple pour le triplet (11N) pourrait être rendu de façon plus orthodoxe comme :

image


À noter : l'ajout automatique des CIF à partir des /1N peut être programmé facilement. Inclure cette transformation dans les arguments de la nouvelle option --rewrite.