2017-11-07 5 views
0

오류 코드 1215가 발생합니다. 하위 테이블에 외래 키 제약 조건을 추가 할 수 없습니다. 부모 테이블에 복합 기본 키가 있습니다. 해당 기본 기본 키를 자식 테이블의 외래 키로 사용하려고합니다. 나를 안내하십시오.오류 1215 : 외래 키 제약 조건을 추가 할 수 없습니다. 복합 외래 키

부모 테이블 당신은 잘못된 외부 키를 지정하는

CREATE TABLE health.procedureProvided(
    specialization varchar(40), 
    procedure_name varchar(60), 
    Insurance_ID int REFERENCES health.insurance (idInsurance), 
    Hospital_ID int REFERENCES health.hospital (idHospital) , 
    Doctor_ID int REFERENCES health.doctor(idDoctor) , 
    CONSTRAINT procedures_fk foreign key (specialization,procedure_name)references health.procedures(Specialty,Procedure_Name) , 
    PRIMARY KEY (specialization, procedure_name, Insurance_ID, Hospital_ID, Doctor_ID) 
); 
+2

'procedures'에 PK가있는 것처럼 보입니다. 합성 키가 아니며, 단지'procedure_name'을 가지고 있습니다. –

+0

프로 시저의 PK가 procedure_name 인 경우 하위 테이블의 FK도 procedure_name이어야합니다. – dwilliss

+0

부모 테이블의 기본 키에 전문화를 추가하는 것을 잊어 버렸습니다. PRIMARY KEY (프로 시저 _ 이름, 특수) – programingforfun

답변

1

CREATE TABLE health.procedures(
    Specialty varchar(40), 
    Procedure_Name varchar(60), 
    PRIMARY KEY (Procedure_Name, Specialty) 
); 

자식 테이블. health.procedure의 기본 키가 procedure_name이지만 health.procedureProvided에서 복합 외래 키를 만들려고합니다. 마스터 테이블의 Specialty가 기본 테이블의 일부가 아니므로이를 외래 키로 작성할 수 없습니다. 외래 키는 기여 테이블의 기본 키에있는 모든 열을 포함해야하지만 기본 키에없는 값을 포함 할 수 없습니다. 세 가지 옵션이 있습니다. 1. Specialty를 프로 시저에서 기본 키의 구성 요소로 지정하십시오. 불행히도 그것은 절차가 반드시 고유하지는 않을 것이고, 전문에 의해 유일 할 것임을 의미합니다. 2. 대리 키 추가 - 시스템에서 생성 된 시퀀스 값, uuid 또는 다른 것 (타임 스탬프는 권장되지 않음). 3. 유효성 검증 테이블 valid_procedures W valid_specialties를 작성하고 health.procedure 테이블을 유효 프로 시저와 상관 된 특 성을 제공하는 교차 테이블로 사용하십시오. 그러면 전체 기본 키를 이주 할 수 있습니다.

+0

답해 주셔서 감사합니다. 부모 테이블에 오류가 발생했습니다. 부모 테이블에서 오류를 수정했습니다. 그러나 여전히 1215 같은 오류가 발생합니다. – programingforfun

+0

외래 키 열의 순서가 중요합니다. MySQL을 사랑해야 해 :) –

관련 문제