Трябва да направите едно ограничение за външен ключ, препращащо към full първичен или уникален ключ на всяка посочена таблица. Не можете да създавате отделни външни ключове към отделни колони в средата на първичния ключ на таблицата с препратки.
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)
);
Използвах думата трябва по-горе, защото InnoDB всъщност е малко по-снизходителен от стандарта ANSI/ISO SQL, когато става въпрос за външни ключове. Стандартният SQL казва, че колоните на външния ключ трябва да бъде пълният списък с колони на посочения първичен или уникален ключ.
InnoDB ви позволява да използвате подмножество от колони, стига те да са ляв префикс на тези колони. Но не бива да правите това, защото получавате наистина объркващи резултати, когато дъщерен ред може да се позовава на множество редове в неговата родителска таблица.