Une FK d'une table A vers une tables B (A.B_id pointe B.id) représente une relation 1-n classique (ou « 1 to 0..* ») : pour une ligne B tu as n (≥ 0) lignes A.
Si on ajoute un index UNIQUE sur cette FK, on ne pourra plus avoir 2 lignes A pointant vers la même ligne B : on a toujours une relation 1-n mais avec n ≤ 1. Dans ce cas on a donc une relation qu'on pourrait appeler « 1-1 » mais en détaillant ça reste du « 1 to 0..1 ».
Je ne trouve pas de représentation concrète (hors utilisation de triggers) en base de données d'une relation « 1 to 1..1 », et c'est ce qui me fait pencher aussi vers l'aplatissement des données, pour une simple question de garantie de la cohérence des données au niveau du schéma.
P.S: dans tous les cas +1 pour InnoDB.
Si on ajoute un index UNIQUE sur cette FK, on ne pourra plus avoir 2 lignes A pointant vers la même ligne B : on a toujours une relation 1-n mais avec n ≤ 1. Dans ce cas on a donc une relation qu'on pourrait appeler « 1-1 » mais en détaillant ça reste du « 1 to 0..1 ».
Je ne trouve pas de représentation concrète (hors utilisation de triggers) en base de données d'une relation « 1 to 1..1 », et c'est ce qui me fait pencher aussi vers l'aplatissement des données, pour une simple question de garantie de la cohérence des données au niveau du schéma.
P.S: dans tous les cas +1 pour InnoDB.
Ressources [PHP][MySQL][prototype.js]