gillespockpock
Messages postés7Date d'inscriptionvendredi 23 mai 2008StatutMembreDernière intervention20 juin 2008
-
20 juin 2008 à 08:27
theguitou
Messages postés75Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention14 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?
theguitou
Messages postés75Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention14 janvier 200935 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 !