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作为提供有效过程和相关专业的交集,然后您可以迁移整个主键。