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)
Contrainte (éventuellement) : PROJ(Classe1,c)=PROJ(Classe2,c)
ou
Classe1(#a,b)
Classe2(#c,d,a=>Classe1)
avec a UNIQUE ou KEY
Contrainte (éventuellement) : PROJ(Classe1,a)=PROJ(Classe2,a)
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
...