假设我有三张桌子:
employers : id | name | ...
workers: id | name | ...
jobs : id | description | employer_id | ...我希望雇主能够给几个工人提供工作机会,这样第一个接受工作的工人就能得到这份工作。我正在努力设计一张桌子来解决这个问题。
我想出了一张这样的桌子:
offers: id | job_id | worker_id | statusjob_id和worker_id将分别指作业和工人。状态是带有"accepted", "pending" and "closed" as possible values. (the default value is "pending")的ENUM
这里的想法是,当员工接受一个待遇时,待遇中相应行的状态设置为“已接受”,而其他待遇的状态(大约相同的工作)设置为“关闭”。
我认为这是可行的,但我还是想问问你们是否认为这是一个好的、有效的解决方案。如果没有,什么是更好的解决办法。
谢谢
注:这是我第一次尝试设计一个数据库。而且,这不是家庭作业。我只是和一些朋友一起做一个小项目。
发布于 2017-08-14 12:24:23
这个能行,是的。然而,你面临的一个问题是,你必须确保,只有一名工人接受这份工作,而不是同时接受两名。
在您的例子中,您可以这样做:
UPDATE offers o
SET status = 'accepted'
WHERE job_id = x
AND worker_id = y
AND NOT EXISTS (SELECT 1 FROM offers WHERE job_id = o.job_id AND status = 'accepted');当然,还有其他的设计,也可以想象。但这真的取决于你想要实现什么。例如,当pending和closed之间的差异对您来说并不重要时,您可以完全消除status字段。然后,您可以简单地将该职务提供给哪些员工存储在offers中,而在作业表中,您可以有一个列accepted_by。
https://stackoverflow.com/questions/45673563
复制相似问题