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'는 FK를'airport_codenames'에 넣을 것입니다. 마찬가지로'airport_locations'는'airport_codes'에 FK가있는 PK 테이블입니다. 둘 다 나는 다음과 같은 기능 종속성을 asuming했다 –
... 이전 버전과 같다 : AIRPORT_CODE> 도시, 주 AIRLINE_CODE> 이름 – kmaz13
하지만 당신은 복합 키 (airport_locations''에서 airport_code's'당 여러'airline_code'을 허용하는 경우),'airport_codenames'에서 외래 키를 분리합니다. 왜냐하면'airport_locations'의 여러 행을 가리 키기 때문입니다. 그게 당신 문제의 근원이라고 생각해. –