96 votes

Clé étrangère se référant à des clés primaires sur plusieurs tables ?

J'ai deux tables, employees_ce et employees_sn, dans la base de données employees.

Ils ont tous deux leurs colonnes de clé primaire uniques respectives.

J'ai une autre table appelée déductions, dont je veux référencer la colonne de clé étrangère aux clés primaires de employees_ce ainsi que de employees_sn. Est-ce possible ?

par exemple

employees_ce
--------------
empid   name
khce1   prince

employees_sn
----------------
empid   name
khsn1   princess

Est-ce possible ?

deductions
--------------
id      name
khce1   gold
khsn1   silver

1voto

vmarquez Points 1073

Oui, c'est possible. Vous devrez définir 2 FKs pour la 3ème table. Chaque FK pointant vers le(s) champ(s) requis d'une table (c'est-à-dire 1 FK par table étrangère).

0voto

r00fus Points 987

En supposant que vous devez avoir deux tables pour les deux types d'employés pour une raison quelconque, je vais prolonger la réponse de vmarquez :

Schéma :

employees_ce (id, name)
employees_sn (id, name)
deductions (id, parentId, parentType, name)

Données dans les déductions :

deductions table
id      parentId      parentType      name
1       1             ce              gold
2       1             sn              silver
3       2             sn              wood
...

Cela vous permettrait de faire pointer les déductions vers n'importe quelle autre table de votre schéma. Ce type de relation n'est pas supporté par les contraintes au niveau de la base de données, IIRC donc vous devrez vous assurer que votre application gère la contrainte correctement (ce qui rend les choses plus compliquées si vous avez plusieurs applications/services différents qui utilisent la même base de données).

0voto

criss Points 11

Le problème avec ces solutions est que vous ne pouvez plus interroger les employés sans faire au moins une jointure. Si les colonnes ne sont pas trop différentes, envisagez d'utiliser une seule table.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X