1

データベースの割り当てに取り組んでいますが、このエラーが発生しました。

データベースは次のようになります...

Legend: **Primary Key** *Foreign Key

.

Movies (**title, year**, length, genre, *studioName, *producerID) 
StarsIn(***movieTitle, *movieYear, *starName**) 
MovieStar(**name**, birthdate, address, gender) 
MovieMaker(**ID**, name, address)
Studio (**name**, address, *presidentID)

そして、私のコードは次のようになります...

CREATE TABLE Movies (
title varchar(50),
year int,
length int,
genre varchar(50),
studioName varchar(50),
producerID varchar(50),
PRIMARY KEY (title,year)
FOREIGN KEY (studioName) REFERENCES Studio(name),
FOREIGN KEY (producerID) REFERENCES MovieMaker(ID),
);

CREATE TABLE StarsIn (
movieTitle varchar(50),
movieYear int,
starName varchar(50),
PRIMARY KEY (movieTitle,movieYear,starName),
FOREIGN KEY (movieTitle) REFERENCES Movies(title),
FOREIGN KEY (movieYear) REFERENCES Movies(year),
FOREIGN KEY (starName) REFERENCES MovieStar(name)
);

CREATE TABLE MovieStar (
name varchar(50),
birthdate int,
address varchar(50),
gender varchar(50),
PRIMARY KEY (name)
);

CREATE TABLE MovieMaker (
ID varchar(50),
name varchar(50),
address varchar(50),
PRIMARY KEY (ID)
);

CREATE TABLE Studio (
name varchar(50),
address varchar(50),
presidentID varchar(50),
PRIMARY KEY (name),
FOREIGN KEY (presidentID) REFERENCES MovieMaker(ID)
);

ただし、外部キーの構文がオフであることを示すエラーがかなり発生します。誰かが手を貸してくれる可能性はありますか?

4

1 に答える 1

1

外部キーを介して他のテーブルを参照するテーブルは、参照されるテーブルが既に存在する場合にのみ定義できます。したがって、FOREIGN KEY制約で参照されるテーブルが最初に作成されるように、テーブルの順序を変更する必要があります。

さらに、これらの列に個別に定義されたインデックスがないためMovies.year、 およびを参照する外部キーは失敗します。それらを複合として持っていますが、独自のインデックスが必要です。Movies.titlePRIMARY KEY

/* MovieStar, MovieMaker are referenced by other tables
   but have no FKs of their own, so create them first */
CREATE TABLE MovieStar (
  name varchar(50),
  birthdate int,
  address varchar(50),
  gender varchar(50),
  PRIMARY KEY (name)
);

CREATE TABLE MovieMaker (
  ID varchar(50),
  name varchar(50),
  address varchar(50),
  PRIMARY KEY (ID)
);

/* Studio can be created next, referencing only MovieMaker */
CREATE TABLE Studio (
  name varchar(50),
  address varchar(50),
  presidentID varchar(50),
  PRIMARY KEY (name),
  FOREIGN KEY (presidentID) REFERENCES MovieMaker(ID)
);

/* Movies references 2 of the above */
CREATE TABLE Movies (
  title varchar(50),
  year int,
  length int,
  genre varchar(50),
  studioName varchar(50),
  producerID varchar(50),
  /* A comma was missing here... */
  PRIMARY KEY (title,year),
  FOREIGN KEY (studioName) REFERENCES Studio(name),
  FOREIGN KEY (producerID) REFERENCES MovieMaker(ID),
  /* Add individual indices on Movies. Omitting this would result in errno 150 */
  INDEX (year),
  INDEX (title)
);

CREATE TABLE StarsIn (
  movieTitle varchar(50),
  movieYear int,
  starName varchar(50),
  PRIMARY KEY (movieTitle,movieYear,starName),
  FOREIGN KEY (movieTitle) REFERENCES Movies(title),
  FOREIGN KEY (movieYear) REFERENCES Movies(year),
  FOREIGN KEY (starName) REFERENCES MovieStar(name)
);

これは、適切に構築された全体のデモです: http://sqlfiddle.com/#!2/eaf70c

于 2013-03-26T02:49:14.170 に答える