我有一个使用PostgreSQL的数据库,它包含学生,应用程序和工作机会的数据。
是否存在某种约束,这意味着学生只能接受一份工作机会。所以选择“是”'接受工作'属性,他们不能再为他们可能收到的任何其他工作做这个吗?
答案 0 :(得分:1)
这不是一个"约束"。这只是一个专栏。在Student
表中有一个名为AcceptedJobOffer
的列。这解决了直接问题。此外,您需要以下内容:
AcceptedJobOfferId int references JobOffers(JobOfferid)
然后,为Applications
StudentId, JobOfferId
创建一个唯一索引,并包含:
foreign key (StudentId, AcceptedJobOfferId) references Applications(StudentId, JobOfferId)
这确保了作业是一个有效的工作,并且它引用了一个应用程序(假设一个应用程序是一个要求 - 100%的时间 - 接受)。
答案 1 :(得分:0)
我想你有一些工作申请表,里面有一个叫is_accepted
的字段,或者那个订单。您可以在其上添加exclude constraint。 Example here
另一种方法是将一个accepted_job_id
列(理想情况下是一个外键)添加到学生表中,如Gordon已经建议的那样。
旁注:如果要处理实际数据,而不是数据库课程中的理论数据,您可能根本不想强制执行约束。有时候,人们想要或需要多个工作,所以限制系统的方式不能适用于一个以上的工作会引入一种人为的限制,可能会回来并咬你的路。