Je suis en train de concevoir une structure de base de données pour le projet de notre équipe. J'ai actuellement cette même question à l'esprit: est-il possible d'avoir une clé étrangère agissant comme une clé primaire sur une autre table?Une clé étrangère peut-elle agir comme une clé primaire?
Voici quelques-unes des tables de notre conception de base de données de système:
user_accounts
students
guidance_counselors
Ce que je voulais arriver est que la table user_accounts
doit contenir les ID (soi-disant les de lettres de créance de connexion au système) et les mots de passe à la fois les utilisateurs étudiants et les conseillers d'orientation. En résumé, les clés primaires des tables students
et guidance_counselors
sont également la clé étrangère de la table user_accounts
. Mais je ne suis pas sûr que cela soit autorisé.
Une autre question est: une table student_rec
existe aussi, ce qui nécessite un student_number
(qui est le user_id
dans le tableau user_accounts
) et un guidance_counsellor_id
(qui est aussi le user_id
dans le user_accounts
) pour chacun de son dossier. Si les ID d'un étudiant et d'un conseiller d'orientation proviennent tous les deux du user_accounts table
, comment devrais-je concevoir la table student_rec
? Et pour référence future, comment l'écrire manuellement en tant que code SQL?
Cela m'a dérangé et je ne trouve pas de réponse précise ou sûre à mes questions.
Alors que la réponse à votre question est "oui, une clé primaire peut aussi agir comme une clé étrangère", ma recommandation serait d'éviter cela. La même relation peut être exprimée à l'aide de clés primaires discrètes et de clés étrangères, et le fait de surcharger une colonne avec des responsabilités multiples peut entraîner des difficultés sur la route. Par exemple, si la clé primaire est également une colonne d'identité ou est automatiquement affectée à l'aide d'une stratégie GuidComb via ORM, vous examinerez probablement deux transactions ou plus au lieu d'une. Le principe de la responsabilité unique est également utile pour la conception de bases de données. –