我有两张桌子患者和细节。患者与使用外键的详细信息相关。在患者中,一个用户可以拥有多个详细信息值。
我试过了:
INSERT INTO `Patients`
(`patientId`, `name`, `address`, `etage`,
`Door`, `Elevator`, `key_number`, `medicineId`, `lid`,
`doctorId`)
VALUES (109, 'Muller', 'bla bla bla ', 3,
'links' , 1 , 'S12' ,'m9' , '{02.0 , 2.10 ,2.30}' ,
'D11');
当我尝试插入时,我收到以下错误:
无法添加或更新子行:外键约束失败 (
Sanitas
。Patients
,CONSTRAINTPatients_ibfk_2
外键(lid
) 参考Details
(lid
))
答案 0 :(得分:0)
外键意味着Patiens
的每一行都应在其lid
列中包含与lid
Details
列中可用值相匹配的值;最有可能的是,Details
的{{1}}值为lid
的{{1}}中没有行。
使用该结构,您应该为每个{02.0 , 2.10 ,2.30}
值插入一行,但这会导致其他问题(可能会重复lid
个键)。
这显示了表格设计中的一些问题:您所描述的内容看起来像patientId
关系,需要对三个表进行建模。
您需要的结构是
many-to-many
通过这种方式,每个患者可以有一行,每个细节可以有一行,还可以通过关联这两个实体的ID来组合患者和细节的所有组合。
您编写的查询将被拆分为
Patients
patientId
name
address
etage
Door
Elevator
key_number
medicineId
doctorId
--notice, no more lid here
Detail
lid
--whatever else you have here
PatientsDetail
patientId
lid