Bạn nên tạo một ràng buộc khóa ngoại tham chiếu đến đầy đủ khóa chính hoặc khóa duy nhất của mỗi bảng được tham chiếu. Bạn không thể tạo khóa ngoại riêng biệt cho các cột riêng lẻ ở giữa khóa chính của bảng tham chiếu.
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)
);
Tôi đã sử dụng từ nên ở trên vì InnoDB thực sự khoan dung hơn một chút so với tiêu chuẩn ANSI / ISO SQL khi nói đến khóa ngoại. SQL chuẩn cho biết các cột của khóa ngoại phải là danh sách đầy đủ các cột của khóa chính hoặc khóa duy nhất được tham chiếu.
InnoDB cho phép bạn sử dụng một tập hợp con của các cột, miễn là chúng là tiền tố bên trái của các cột đó. Nhưng bạn không nên làm như vậy, vì bạn sẽ nhận được kết quả thực sự khó hiểu khi một hàng con có thể tham chiếu đến nhiều các hàng trong bảng mẹ của nó.