Você deve fazer uma restrição de chave estrangeira referenciando o full chave primária ou exclusiva de cada tabela referenciada. Você não pode separar chaves estrangeiras para colunas individuais no meio da chave primária da tabela de referências.
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)
);
Usei a palavra deveria acima porque o InnoDB é na verdade um pouco mais tolerante do que o padrão ANSI/ISO SQL quando se trata de chaves estrangeiras. O SQL padrão diz que as colunas da chave estrangeira devem ser a lista completa de colunas da chave primária ou exclusiva referenciada.
O InnoDB permite que você use um subconjunto de colunas, desde que sejam um prefixo esquerdo dessas colunas. Mas você não deve fazer isso, porque você obtém resultados muito confusos quando uma linha filha pode fazer referência a múltiplos linhas em sua tabela pai.