Définition d'une clé étrangère

gillespockpock
Messages postés
7
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
20 juin 2008
- 20 juin 2008 à 08:27
theguitou
Messages postés
75
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
14 janvier 2009
- 21 juin 2008 à 00:06
Bonjour, j'ai une question qui m'obstine, je suis en train de développer une application de création de bases de données,

je ne trouve nul par de réponse claire et complète, peut-être pourrez vous m'aider:

Dans une base de données, peut-on avoir une clé étrangère dans une table, faisant référence à seulement une partie de la clé primaire d'une autre table? Autrement dit: une clé étrangère comporte -t-elle forcément tous les champs de la clé primaire vers laquelle elle fait référence?

Si oui, pourrai-je avoir un exemple?

merci

1 réponse

theguitou
Messages postés
75
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
14 janvier 2009
34
21 juin 2008 à 00:06
Salut,

Cela dépend du SGDB que tu utilise, et des champs de la clé primaire auxquels tu veux faire référence ...

Par exemple avec MySQL, un index (donc par exemple une clé primaire) définit sur ABC, peut être utilisé sur ABC, AB, ou A (mais pas sur AC, BC, B ou C).

Exemple :

CREATE TABLE table1 (A INT, B INT, C INT, PRIMARY KEY (A,B,C)) Engine=InnoDB;

CREATE TABLE table2 (A INT, B INT, C INT, FOREIGN KEY (A, B,C) REFERENCES table1(A,B,C)) Engine=InnoDB; => OK

CREATE TABLE table3 (A INT, B INT, C INT, FOREIGN KEY (A, B) REFERENCES table1(A,B)) Engine=InnoDB; => OK

CREATE TABLE table4 (A INT, B INT, C INT, FOREIGN KEY (A) REFERENCES table1(A)) Engine=InnoDB; => OK

CREATE TABLE table5 (A INT, B INT, C INT, FOREIGN KEY (A, C) REFERENCES table1(A, C)) Engine=InnoDB; => Problème

Faute de doc clair, le mieux est encore de tester !
0