Vous devez créer une contrainte de clé étrangère référençant le full clé primaire ou unique de chaque table référencée. Vous ne pouvez pas créer de clés étrangères distinctes pour des colonnes individuelles au milieu de la clé primaire de la table de références.
CREATE TABLE prospect
(Custname VARCHAR(25) NOT NULL,
Carmake VARCHAR(25) NOT NULL,
Carmodel VARCHAR(20) NOT NULL,
Caryear VARCHAR(4) NOT NULL,
Carextcolour VARCHAR(10) NOT NULL,
Cartrim VARCHAR(10) NOT NULL,
Optioncode CHAR(4),
CONSTRAINT pkprospect PRIMARY KEY (Custname, Carmake, Carmodel, Caryear, Carextcolour, Cartrim, Optioncode),
CONSTRAINT fkprospect FOREIGN KEY (Custname) REFERENCES customer(Custname),
CONSTRAINT fk2prospect FOREIGN KEY (Carmake, Carmodel, Caryear, Carextcolour, Cartrim)
REFERENCES car(Carmake, Carmodel, Caryear, Carextcolour, Cartrim),
CONSTRAINT fk7prospect FOREIGN KEY (Optioncode) REFERENCES optiontable(Optioncode)
);
J'ai utilisé le mot devrait ci-dessus car InnoDB est en fait un peu plus indulgent que la norme ANSI/ISO SQL en ce qui concerne les clés étrangères. Le SQL standard indique que les colonnes de la clé étrangère doivent être la liste complète des colonnes de la clé primaire ou unique référencée.
InnoDB vous permet d'utiliser un sous-ensemble de colonnes, tant qu'il s'agit d'un préfixe gauche de ces colonnes. Mais vous ne devriez pas faire cela, car vous obtenez des résultats vraiment déroutants lorsqu'une ligne enfant peut référencer multiple lignes dans sa table parent.