我正在使用MySQL Workbench CE进行大学作业。我有4个表:Applicants, Universities, Job, Interview
。 Interview
在其他3个表中具有外键:appID
(申请人ID),uniID
(大学ID)和jobID
(职位ID)。此外,job
表具有uni
列,它是universities.id
的外键。本质上,每个工作都有一个工作编号以及与之相关的大学。每个面试除了一些其他信息外,还包括申请人,工作和大学。
我试图弄清楚如何检查输入到interview
表中的职位空缺(职位编号及其相关的大学)是否确实存在于job
表中。
例如,如果job
中的唯一行是:ID | JobID | UniID | .. 1 1 1 .
那么interview
表不应接受类似以下内容的内容:ID | AppID | JobID | UniID | ... x x 1 2 .
因为JobID = 1
和UniID = 2
没有工作。SELECT * FROM job as J LEFT JOIN interview as I ON J.uni = I.uniid WHERE J.id = I.jobid
是我针对此问题提出的一项检查,但是,我不确定是否应该尝试在触发器中或断言中使用它。
最佳答案
您正在寻找外键关系。
如果jobs
表在两列上都没有主键/唯一键,则定义一个:
alter table jobs add constraint unq_jobs_jobid_uniid on job(jobID, uniID);
然后,您可以将外键添加到
interviews
:alter table interviews add constraint fk_interviews_jobid_uniID
foreign key (jobID, uniID) references job(jobID, uniID);
请注意,即使
jobID
已经是jobs
中的主键,此方法也有效。