-1

これらすべての複合キーを使用してこのテーブルを作成する必要があります。

見通し(custname、carmake、carmodel、caryear、carextcolour、cartrim、optioncode)

上記のすべてのフィールドには、プライマリであることを示すために下線が引かれています。したがって、7つの主要な複合キー。

何らかの理由で、これはテーブルを作成しません。

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) REFERENCES car(Carmake),
 CONSTRAINT fk3prospect FOREIGN KEY (Carmodel) REFERENCES car(Carmodel),
 CONSTRAINT fk4prospect FOREIGN KEY (Caryear) REFERENCES car(Caryear),
 CONSTRAINT fk5prospect FOREIGN KEY (Carextcolour) REFERENCES car(Carextcolour),
 CONSTRAINT fk6prospect FOREIGN KEY (Cartrim) REFERENCES car(Cartrim),
 CONSTRAINT fk7prospect FOREIGN KEY (Optioncode) REFERENCES optiontable(Optioncode)
);

複合キーでいっぱいのこのテーブルを作成するために使用しているコード。

4

3 に答える 3

0

参照される各テーブルの完全な主キーまたは一意のキーを参照する 1 つの外部キー制約を作成する必要があります。参照テーブルの主キーの途中にある個々の列に個別の外部キーを作成することはできません。

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)
);

外部キーに関しては、実際には InnoDB が ANSI/ISO SQL 標準よりも少し寛容であるため、上記の「すべき」という言葉を使用しました。標準 SQL では、外部キーの列は、参照される主キーまたは一意キーの列の完全なリストである 必要があります。

InnoDB では、列の左プレフィックスである限り、列のサブセットを使用できます。ただし、子行が親テーブルの複数の行を参照する可能性がある場合、非常に紛らわしい結果が得られるため、これを行うべきではありません。

于 2012-12-14T01:11:13.710 に答える