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

error 1215: CANNOT ADD FOREIGN KEY CONSTRAINT ; Composite Foreign key

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

父母表

1
2
3
4
5
CREATE TABLE health.procedures(
    Specialty varchar(40),
    Procedure_Name varchar(60),
    PRIMARY KEY (Procedure_Name, Specialty)
);

儿童桌

1
2
3
4
5
6
7
8
9
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)
);


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