错误1215:无法添加外键约束;复合外键

时间:2017-11-07 19:17:17

标签: mysql foreign-keys primary-key

我收到ERROR CODE 1215:无法为子表添加外键约束。 父表具有复合主键。我想在子表中使用该复合主键作为外键。 请指导我。

父母表

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

儿童表

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)
);

1 个答案:

答案 0 :(得分:1)

您正在指定无效的外键。您的主键是health.procedure中的procedure_name,但您尝试在health.procedureProvided中创建复合外键。您不能将其创建为外键,因为主表中的专业列不是主要表的一部分。外键必须包含贡献表主键中的所有列,但不能包含不在该主键中的值。你有三个真正的选择。 1.将Specialty指定为过程中主键的组件。不幸的是,这意味着程序不一定是独特的,它将是专业的独特。 2.添加代理键 - 系统生成的序列值,uuid或其他内容(不建议使用时间戳)。 3.创建验证表valid_procedures和valid_specialties,并使用表health.procedure作为提供有效过程和相关专业的交集,然后您可以迁移整个主键。

相关问题