Bonjour,
J'ai une réflexion concernant les références circulaires lors de modélisation d'une base de données et je souhaiterais un regard externe nouveau.
Admettons le cas de figure suivant avec deux entités : une entité équipe et une entité membre. J'aimerais représenter le fait qu'une équipe possède des membres dont un membre principal. Un membre est unique et peut être assignée à une seule équipe à la fois.
Une possibilité est de créer deux associations : une première, une équipe possède un ou plusieurs membres (1..N) et une deuxième, une équipe possède un et un seul membre principal (1..1). En traduisant ce modèle au niveau logique, je me retrouve avec deux tables correspondant aux deux entités : équipe et membre. La première association va se traduire en un clé étrangère non-null dans la table membre référençant la table équipe. La seconde, en une clé étrangère non-null dans la table équipe référençant la table membre. Je me retrouve donc avec une référence circulaire qui est d'autant plus problématique que les deux clés étrangères sont obligatoires. L'ajout de données est donc impossible.
Une autre possibilité est de conserver toujours les deux entités précédemment mentionnées, mais uniquement la première association, une équipe possède un ou plusieurs membres (1..N). Afin de représenter le membre principal, j'ajoute un attribut principal à mon entité membre. Afin de garantir qu'une équipe possède un et un seul membre principal, je mets en place une contrainte CHECK au niveau du MLD. La transformation vers le modèle logique ne pose pas de problème (deux tables, une clé étrangère et la contrainte CHECK) et l'insertion non plus également vu qu'il n'y a plus de référence circulaire.
La possibilité n°2 me plaît moins : la représentation de la règle du membre principal unique et obligatoire par équipe n'y est plus bien représentée dans le modèle conceptuel et l'insertion de données induit une opération de contrôle supplémentaire. De plus, la récupération du membre principal est légèrement plus compliquée.
Un regard externe est le bienvenu, je prends peut-être le problème du mauvais côté.
À titre annexe, les technologies utilisées sont SQL Server comme SGBD et EntityFramework 6.X au niveau applicatif pour la persistence.
Par avance merci pour vos réponses !
Partager