为工作机会设计表格

时间:2017-08-14 11:30:13

标签: mysql sql database database-design

假设我有3张桌子:

employers : id | name | ...

workers: id | name | ...

jobs : id | description | employer_id | ...

我希望雇主能够为几个工人提供工作机会,这样第一个接受报价的工人就能得到这份工作。我正在努力设计一个表来解决这个问题。

我想出了这样一张桌子:

 offers: id | job_id | worker_id | status

job_id worker_id 将分别引用作业工作人员。 状态为包含 "accepted", "pending" and "closed" as possible values. (the default value is "pending")

的ENUM

这里的想法是,当工人接受要约时,要约中相应行的状态设置为“已接受”,其他要约(关于同一工作)的状态为设置为“关闭”。

我认为这可行,但仍然想问你们是否认为这是一个好的有效解决方案。如果没有,那将是一个更好的解决方案。

由于

注意:这是我第一次尝试设计数据库。此外,这不是一个功课。我正和一些朋友一起做一个小项目。

1 个答案:

答案 0 :(得分:1)

这可行,是的。但是,您面临的一个问题是,您必须确保只有一名工人接受这项工作,而不是同时接受两份工作。

在你的情况下,你会这样做:

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');

当然还有其他可以想象的设计。但这实际上取决于你想要达到的目标。 例如,当pendingclosed之间的差异对您来说并不重要时,您可以完全摆脱状态字段。 然后你可以简单地在offers存储工作提供给哪些工作者,在工作表中你可以有一列accepted_by