我正在为医院数据库制作架构。我有4个表,候选人详细信息,医院详细信息,职位详细信息和面试详情。面试表有一个外键引用候选表,一个到位置表,我也希望它有一个引用医院表但我注意到有可能那么有一个元组,其中位置id的组合并且医院ID与位置表上发生的组合不同(位置表具有指向医院表的外键)因此换句话说,可以输入不正确的医院ID或位置ID。面试表。因此,例如在面试表上,我可以输入位置ID为01且医院ID为02的元组,但如果您进入位置表,则正在被评审的位置ID可能很容易具有不同的医院ID(例如03)。
我当时认为可能不会创建一个同时引用两个不同表的复合外键。如果不是这样,是解决问题的唯一方法,只需从访谈表中删除医院ID栏吗?
我一直在使用mySQL工作台,因此我手边没有任何SQL代码,但如果需要任何额外信息(例如ERR图像)来回答这个问题,我会尽力采购它。< / p>
答案 0 :(得分:0)
简答: 否,外键约束始终引用一个父表。
但是,如果我理解你的情况,你就有4张桌子
candidate details. id
hospital details. id
position details. id, hospital_id
interview details. candidate_id, hospital_id, position_id
问题是位置和医院之间的关系是多对多
简单方法EAV 添加另一个表名为hospital_postition,其中包含所有医院的所有职位,然后将每个hospital_postition链接到面试中的condidate
candidate details. id
hospital details. id
position details. id
hospital_postition. id, hospital_id, position_id
interview details. candidate_id, hospital_position_id
答案 1 :(得分:0)
少即是多了!
您遇到此问题,因为该表格不是第3范式。 hospital_id不依赖于访谈,它取决于位置,而position_id不是此能力的关键。
问问自己,我真的想在面试表中记录hospital_id吗?您可能需要的所有信息都已存储在职位表中。我想到这个专栏的唯一原因就是你在医院进行面试的地方,而不是职位所在的医院。如果是这种情况,那么您的架构已经正确,但您的问题则另有说明。
从面试表中删除hospital_id列,您的问题将神奇地消失。
关于从MySQL Workbench获取表定义(SQL代码)的主题,请尝试以下方法: