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 35
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
Rejoignez-nous