TheRom_S a écrit :
A la création, il faut créer les 2, toujours.
Par contre je vois que dans ta seconde table, tu n'as qu'une seule clé qui est étrangère. C'est faisable mais pas très propre.
La raison est la suivante : il y a 2 cas possibles
- Soit, pour 1 enregistrement (= une entrée = une ligne) dans ta première table correspond 1 seul enregistrement dans la seconde et inversement. On parle de relation 1:1 et on considère généralement qu'il est plus efficace de concaténer les deux tables en une seule. Dans ton exemple, tu pourrais avoir ceci :
table user
------------
user_id (pk)
nom
prenom
login
password
------------
- Soit la relation n'est pas 1:1 mais 1:N (un sens ou l'autre). Dans ce cas, on utilise dans la seconde table une clé primaire qui est unique pour chaque enregistrement + une clé étrangère qui référence la première table. Si tu regardes mon exemple, c'est le cas dans la table contact car paul a 2 emails qui doivent avoir chacun leur clé primaire dans la table contact et une référence vers le même paul de la table user. Dans ton exemple, si un couple (nom/prénom) peut avoir plusieurs comptes donc correspondre à plusieurs couples (login/password), il faut ajouter une clé primaire différente comme ceci :
table user
------------
user_id (pk)
nom
prenom
------------
table account
------------
account_id (pk)
user_id (fk)
login
password
------------
Un cas supplémentaire, les relation N:N ; il y a plusieurs manières de représenter la relation dans les tables, par exemple tu gardes les 2 tables de bases avec uniquement des clés primaires et tu ajoutes une table qui recense les associations entre les deux avec
- soit 1 clé primaire spécifique à cette table et 2 clés étrangères référençant les 2 premières tables
- soit les 2 clés étrangères en considérant le couple (FK1, FK2) comme clé primaire (à vérifier). On peut utiliser des couples de champs pour créer
- une clé unique (par ex, pour 2 champs, le couple ("a","b" ) sera unique et ne pourra apparaître que dans un seul enregistrement) ;
- une clé étrangère qui référence 2 clés qui sont déja étrangères dans une autre table ;
A vérifier
- une clé étrangère qui référence un couple de deux clé primaires sur deux tables différentes ;
- une clé étrangère qui référence une clé primaire constituée par un couple de champs dans une seule table ;
- une clé primaire constituée par 2 champs
Il n'y a pas que les couples de champs qui peuvent être utilisés comme clés, ça marche avec N champs
|