Est-ce correct d'avoir deux clés étrangères dans une table référençant une clé primaire d'une autre table?
EmployeeID est une clé primaire dans la table des employés et apparaît deux fois comme clé étrangère dans la table de feuille de temps.
Il y aura peu d'administrateurs remplissant des feuilles de temps au nom d'autres employés.
Dans le champ du tableau de la feuille de temps, 'TimsheetFor' aura l'employé de cette personne qui a travaillé sur des projets et le champ 'EnteredBy' ou 'FilledBy' aura l'employé de cette personne qui a rempli cette feuille de temps.
Laquelle des options suivantes est correcte?
REMARQUE: les tableaux affichent uniquement les champs liés à cette question.
J'irais avec option 1. Il est parfaitement correct d'avoir deux colonnes de clé étrangère référençant la même colonne de clé primaire dans une table différente, car chaque valeur de clé étrangère fera référence à un enregistrement différent dans la table associée.
Je suis sûr option 2 fonctionnerait, mais vous auriez essentiellement une relation 1 à 1 entre TIMESHEET_TABLE
et TIMESHEET_FILLED_BY
, rendant deux tables inutiles et plus difficiles à gérer.
En fait, si les deux ENTERED_BY
et TIMESHEET_FOR
sont requis par paires, l'utilisation de option 1 est beaucoup plus logique car elle est automatiquement appliquée par la base de données et les clés étrangères.
oui, cela ne pose aucun problème ... vous pouvez utiliser deux fois la clé primaire d'une table dans une autre table comme clé étrangère.
L'option 1 est une solution parfaite. Vous pouvez définir la contrainte de clé étrangère comme suit
1ère contrainte de clé étrangère pour la colonne Timesheet_For
ALTER TABLE TIMESHEETTABLE
ADD CONSTRAINT fk_TimesheetTable_EmployeeTable
FOREIGN KEY (TIMESHEET_FOR)
REFERENCES EMPLOYEETABLE(EMPLOYEE_ID)
2e contrainte de clé étrangère pour la colonne Entered_By
ALTER TABLE TIMESHEETTABLE
ADD CONSTRAINT fk_TimesheetTable_EmployeeTable_1
FOREIGN KEY (ENTERED_BY)
REFERENCES EMPLOYEETABLE(EMPLOYEE_ID)