1

コメントでマークした 2 つの外部キーの何が問題になっていますか?

create database db;
use db;

create table Flug(
  Flugbez varchar(20),
  FDatum Date,
  Ziel varchar(20),
  Flugzeit int,
  Entfernung int,
  Primary Key (Flugbez, FDatum)
);

create table Flugzeugtyp(
  Typ varchar(20),
  Hersteller varchar(20),
  SitzAnzahl int,
  Reisegeschw int,
  primary key (Typ)
);

create table flugzeug(
  Typ varchar(20),
  SerienNr int,
  AnschDatum Date,
  FlugStd int,
  primary key(Typ,SerienNr),
  foreign key(Typ) references Flugzeugtyp(Typ)
);

create table Abflug(
  Flugbez varchar(20),
  FDatum Date,
  Typ varchar(20),
  Seriennr int,
  Kaptaen varchar(20),
  Primary key(Flugbez,FDatum,Typ,SerienNr),
  Foreign key(Flugbez) references Flug(Flugbez),
  -- Foreign key(FDatum) references Flug(FDatum),
  Foreign key(Typ) references Flugzeugtyp(Typ)
  -- ,Foreign key(SerienNr) references Flugzeug(SerienNr)
);

外部キーのコメントを外すと、次のエラーが発生します。

ERROR 1005 (HY000): Can't create table 'db.abflug' (errno: 150)

MySQL Server 5.5 の標準インストールを使用しています。

4

2 に答える 2

5

問題は、参照している主キーが複合キーであることですが、外部キーの列の 1 つ (最初の列ではない) のみを参照しようとしていることです。

たとえばprimary key(Typ,SerienNr)、テーブル flugzeug で主キーを定義しますが、テーブル Abflug では を参照しようとしますForeign key(SerienNr) references Flugzeug(SerienNr)

キー全体を参照する必要があります ( Foreign key(Typ, SerienNr) references Flugzeug(Typ,SerienNr))。

于 2011-01-09T18:59:49.523 に答える