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