Sie sollten eine Fremdschlüsseleinschränkung erstellen, die auf full verweist Primärschlüssel oder eindeutiger Schlüssel jeder referenzierten Tabelle. Sie können keine separaten Fremdschlüssel für einzelne Spalten in der Mitte des Primärschlüssels der Referenztabelle erstellen.
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)
);
Ich habe das Wort sollte verwendet oben, weil InnoDB tatsächlich etwas nachsichtiger ist als der ANSI/ISO-SQL-Standard, wenn es um Fremdschlüssel geht. Standard-SQL sagt, dass die Spalten des Fremdschlüssels müssen die vollständige Liste der Spalten des referenzierten Primärschlüssels oder eindeutigen Schlüssels sein.
InnoDB erlaubt Ihnen, eine Teilmenge von Spalten zu verwenden, solange sie ein linkes Präfix dieser Spalten sind. Aber das sollten Sie nicht tun, da Sie wirklich verwirrende Ergebnisse erhalten, wenn eine untergeordnete Zeile auf multiple verweisen kann Zeilen in der übergeordneten Tabelle.