Cet exemple explore un défi courant en matière de conception de bases de données : créer une relation de clé étrangère dans laquelle une seule table doit référencer les clés primaires de plusieurs autres tables. Le scénario spécifique implique que la table deductions
doit être liée aux tables employees_ce
et employees_sn
.
La question est de savoir si une clé étrangère dans deductions
peut directement référencer des clés primaires dans employees_ce
et employees_sn
simultanément. La réponse est : pas directement, dans une base de données relationnelle standard. Une seule clé étrangère ne peut faire référence qu'à une seule clé primaire.
La solution proposée s'appuie sur un modèle d'héritage bien structuré pour résoudre ce problème.
Les tables employees
, employees_ce
et employees_sn
représentent une hiérarchie d'héritage. employees
est la table de base, avec employees_ce
et employees_sn
comme tables spécialisées qui en héritent.
Structure de la base de données :
<code class="language-sql">employees (id INT PRIMARY KEY, name VARCHAR(255)) employees_ce (id INT PRIMARY KEY, ce_specific_attribute VARCHAR(255), employee_id INT, FOREIGN KEY (employee_id) REFERENCES employees(id)) employees_sn (id INT PRIMARY KEY, sn_specific_attribute VARCHAR(255), employee_id INT, FOREIGN KEY (employee_id) REFERENCES employees(id))</code>
Solution :
Au lieu d'un lien direct vers employees_ce
et employees_sn
, la table deductions
doit faire référence à la table parent commune, employees
:
<code class="language-sql">deductions (id INT PRIMARY KEY, employee_id INT, deduction_amount DECIMAL(10,2), ..., FOREIGN KEY (employee_id) REFERENCES employees(id))</code>
Cette approche garantit l'intégrité référentielle et évite la redondance. Le employee_id
dans deductions
renvoie au dossier de l'employé dans employees
, que cet employé dispose ou non d'informations supplémentaires dans employees_ce
ou employees_sn
. Cette conception gère efficacement la relation et maintient la cohérence des données.
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!