2016-10-04 20 views
2

uni割り当てのデータベースを作成しようとしていますが、私のコードの47行目の外部キー制約に問題があります。Foreign Constainを作成する際にMYSQLエラーが発生しました

CONSTRAINT Sessions_Screen_ID_FK FOREIGN KEY (ScreenID) REFERENCES screen(ScreenID), 

私が受けてるエラーが

#1215である - 外部キー制約に

を追加することはできませんし、私はそれを回避するように見える傾けます。スクリプトが正常に実行されても、私は制約を削除します。

私は完全なスクリプト以下の貼り付けました: ありがとうのお時間を

Drop Database IF EXISTS AE2_ISYS114; 

CREATE Database AE2_ISYS114; 

CREATE TABLE AE2_ISYS114.branch(
BranchID   char(2) NOT NULL, 
BranchName   varchar(20), 
BranchSuburb  varchar(15), 
BranchPostCode  char(4), 
PRIMARY KEY (BranchID) 
); 



CREATE TABLE AE2_ISYS114.movie(
MovieID     char(2) NOT NULL, 
MovieName    varchar(20), 
MovieGenre    varchar(20), 
MovieClassification  varchar(5), 
PRIMARY KEY (MovieID) 
); 


CREATE TABLE AE2_ISYS114.screen(
ScreenID    char(2) NOT NULL, 
BranchID    char(2), 
ScreenCapacity   int(3), 
PRIMARY KEY (BranchID,ScreenID), 
CONSTRAINT Screen_Branch_ID_fk FOREIGN KEY (BranchID) REFERENCES Branch(BranchID) 
); 


CREATE TABLE AE2_ISYS114.sessions(
SessionID    char(4) NOT NULL, 
BranchID    char(2), 
ScreenID    char(2), 
MovieID     char(2), 
SessionDate    DATE, 
SessionPrice   Decimal(4,2), 
PRIMARY KEY (SessionID), 
CONSTRAINT Sessions_Branch_ID_fk FOREIGN KEY (BranchID) REFERENCES branch(BranchID), 
CONSTRAINT Sessions_Screen_ID_FK FOREIGN KEY (ScreenID) REFERENCES screen(ScreenID), 
CONSTRAINT Sessions_Movie_ID_fk FOREIGN KEY (MovieID) REFERENCES movie(MovieID) 
); 

答えて

0

問題は、MySQLはインデックスを作成するために参照されたフィールド(screen.ScreenID)が必要ということで、参照されるフィールドは、左端でなければなりませんインデックスのフィールド。 using foreign keys上のMySQLのドキュメントが言うように: 外部キーチェックが速くなり、テーブルスキャンを必要としないことができるように

MySQLは外部キーと参照キーのインデックスが必要です。 参照表では、外部キー 列が同じ順序で最初の列としてリストされている索引が必要です。このような のインデックスは、 が存在しない場合は自動的に参照テーブルに作成されます。

screen.ScreenIDフィールドがscreenテーブルの主キーの一部である、しかし、それは、ない左端のフィールドです。外部キーを作成するには、screen.ScreenIDフィールドに別のインデックスを作成する必要があります。

+0

OMG私は画面のPkeyでうんざりしている方法を指摘するだけで、コードを見てまっすぐに2時間かかりました –

+0

これはすべての開発者に起こります、私は間違いなく含まれています:) – Shadow

関連する問題