私はMySQLの別のテーブルを正規化するためのスクリプトを作成しようとしています。以下は、私が持っているものです。MySQLのエラー150
USE hw7;
SET foreign_key_checks = 0;
DROP TABLE IF EXISTS airport_codes;
DROP TABLE IF EXISTS airport_locations;
DROP TABLE IF EXISTS airport_codenames;
SET foreign_key_checks = 1;
CREATE TABLE airport_codes(
airport_code char(3) not null,
airline_code char(2) not null,
primary key (airport_code, airline_code)
);
INSERT INTO airport_codes SELECT DISTINCT airport_code, airline_code
FROM airport_airlines;
CREATE TABLE airport_locations(
airport_code char(3) not null,
city varchar(20) not null,
state char(2) not null,
primary key (airport_code),
constraint ap_code_fk
foreign key (airport_code)
references airport_codes(airport_code)
);
INSERT INTO airport_locations SELECT DISTINCT airport_code, city, state
FROM airport_airlines;
CREATE TABLE airport_codenames(
airline_code char(2) not null,
name varchar(20) not null,
primary key (airline_code),
constraint al_code_fk
foreign key (airline_code)
references airport_codes(airline_code)
);
INSERT INTO airport_codenames SELECT DISTINCT airline_code, name
FROM airport_airlines;
このエラーでこのコードの結果は:
Can't create table hw7.airport_codenames errno:150
これらのFK関係は逆のように見えます。典型的には、 'airport_codenames'がプライマリテーブルであり、' airport_codes'は 'airport_codenames'にFKを持ちます。同様に、 'airport_locations'はPKテーブルになり、' airport_codes'にはFKが入ります。両方とも後方に見える... –
空港コード、市町村 名前 – kmaz13
しかし、airport_locationsの 'airport_code'に複数の' airline_code'を指定した場合(コンポジットキー)、それは 'airport_codenames'からのforeign keyを' airport_locations'の複数の行を指し示すので、それを分解します。私はそれがあなたの問題の原因だと思う。 –