Transformation des associations 1:1 (approche générale)
Il existe deux solutions pour transformer une association 1:1 :
Avec deux relations : on traite l'association 1:1 comme une association 1:N, puis l'on ajoute une contrainte UNIQUE sur la clé étrangère pour limiter la cardinalité maximale à 1 ;
Avec une seule relation : on fusionne les deux classes en une seule relation.
Méthode : Avec deux relations (clé étrangère)
Une des deux relations est choisie pour porter la clé étrangère ;
on ajoute les contraintes :
UNIQUE
ouKEY
(clé candidate) sur la clé étrangère ; et si nécessaire une contrainte imposant l'instanciation simultanée des deux relations.
Classe1(#a,b,c=>Classe2) avec c UNIQUE ou KEY
Classe2(#c,d)
ou
Classe1(#a,b)
Classe2(#c,d,a=>Classe1)
avec a UNIQUE ou KEY
Méthode : Avec une relation (fusion)
On créé une seule relation contenant l'ensemble des attributs des deux classes ;
on choisit une clé parmi les clés candidates.
Classe12(#a,b,c,d) avec c UNIQUE ou KEY
ou
Classe21(#c,d,a,b) avec a UNIQUE ou KEY
Remarque : Fusion des relations dans le cas de la traduction de l'association 1:1
Ce choix entre les deux méthodes sera conduit par une appréciation du rapport entre :
La complexité introduite par le fait d'avoir deux relations là ou une suffit
La pertinence de la séparation des deux relations d'un point de vue sémantique
Les pertes de performance dues à l'éclatement des relations
Les pertes de performance dues au fait d'avoir une grande relation
Les questions de sécurité et de sûreté factorisées ou non au niveau des deux relations
...
Complément :
Dans le cas d'une association 1..1:1..1 il faudra ajouter une contrainte complémentaire.