Est-il possible qu'une clé étrangère fasse référence à plusieurs clés primaires sur différentes tables ?
Une question fréquente de conception de base de données implique de référencer des clés primaires de plusieurs tables à l'aide d'une seule colonne de clé étrangère. Illustrons avec un exemple :
Base de données : informations sur les employés
Tableaux :
employees_ce
(Clé primaire : empid
)employees_sn
(Clé primaire : empid
)deductions
(Clé étrangère : id
)La clé étrangère id
de la table deductions
peut-elle faire référence à la fois aux clés empid
primaires de employees_ce
et de employees_sn
?
La solution :
Bien qu'il puisse sembler intuitif de lier une seule clé étrangère à plusieurs clés primaires dans différentes tables, la conception standard d'une base de données ne le permet pas. La meilleure pratique consiste à introduire une table de liaison pour connecter les entités liées.
Structure de base de données améliorée :
employees
(Clé primaire : id
)employees_ce
(Clé étrangère : id
)employees_sn
(Clé étrangère : id
)deductions
(Clé étrangère : employee_id
)Cette structure révisée utilise une seule table employees
avec une clé primaire (id
) pour représenter tous les employés, quel que soit leur type. employees_ce
et employees_sn
utilisent désormais des clés étrangères faisant référence à la colonne id
dans employees
, les liant à leurs catégories d'employés respectives. La clé étrangère de la table deductions
, employee_id
, pointe vers la clé primaire de la table employees
. Cette approche garantit l'intégrité des données et simplifie les requêtes et les jointures entre les tables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!