Powinieneś utworzyć jedno ograniczenie klucza obcego odwołujące się do pełnego klucz podstawowy lub unikalny każdej tabeli, do której się odwołuje. Nie możesz utworzyć oddzielnych kluczy obcych dla poszczególnych kolumn w środku klucza podstawowego tabeli odnośników.
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)
);
Użyłem słowa powinien powyżej, ponieważ InnoDB jest w rzeczywistości nieco łagodniejszy niż standard ANSI/ISO SQL, jeśli chodzi o klucze obce. Standardowy SQL mówi, że kolumny klucza obcego muszą być pełną listą kolumn przywoływanego klucza podstawowego lub unikatowego.
InnoDB pozwala na użycie podzbioru kolumn, o ile są one lewym przedrostkiem tych kolumn. Ale nie powinieneś tego robić, ponieważ otrzymasz bardzo mylące wyniki, gdy wiersz podrzędny może odwoływać się do wielu wierszy w swojej tabeli nadrzędnej.