U moet één externe sleutelbeperking maken die verwijst naar de volledige primaire of unieke sleutel van elke tabel waarnaar wordt verwezen. U kunt geen aparte externe sleutels maken voor afzonderlijke kolommen in het midden van de primaire sleutel van de referentietabel.
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)
);
Ik gebruikte het woord moeten hierboven omdat InnoDB eigenlijk een beetje soepeler is dan de ANSI/ISO SQL-standaard als het gaat om externe sleutels. Standaard SQL zegt dat de kolommen van de refererende sleutel moeten de volledige lijst met kolommen zijn van de primaire of unieke sleutel waarnaar wordt verwezen.
InnoDB staat u toe om een subset van kolommen te gebruiken, zolang ze maar een linker prefix van die kolommen zijn. Maar je moet dat niet doen, omdat je echt verwarrende resultaten krijgt wanneer een onderliggende rij kan verwijzen naar meerdere rijen in de bovenliggende tabel.