Du bør lave en fremmednøglebegrænsning, der refererer til den fulde primær eller unik nøgle for hver refereret tabel. Du kan ikke lave separate fremmednøgler til individuelle kolonner i midten af referencetabellens primære nøgle.
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)
);
Jeg brugte ordet bør ovenfor, fordi InnoDB faktisk er en smule mere skånsom end ANSI/ISO SQL-standarden, når det kommer til fremmednøgler. Standard SQL siger, at kolonnerne i fremmednøglen skal være den fulde liste over kolonner i den refererede primære eller unikke nøgle.
InnoDB tillader dig at bruge et undersæt af kolonner, så længe de er et venstrepræfiks for disse kolonner. Men du bør ikke gøre det, for du får virkelig forvirrende resultater, når en underordnet række kan referere til flere rækker i dens overordnede tabel.