2017-08-14 51 views
0

比方说,我有3个表:设计表提供

employers : id | name | ... 

workers: id | name | ... 

jobs : id | description | employer_id | ... 

我希望雇主能够使一个工作机会给几个工人,使第一个工人接受要约得到了那份工作。我正在努力设计一个表来解决这个问题。

我想出了这样一个表格:

offers: id | job_id | worker_id | status 

JOB_IDworker_id将是一个FK分别引用工作工人。 状态是"accepted", "pending" and "closed" as possible values. (the default value is "pending")

一个ENUM这里的想法是,当工作人员接受要约,则相应的行的状态提供设置为“接受”和其他优惠的状态(大约相同的工作)被设置为“关闭”。

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

谢谢

注:这是我第一次试图设计一个数据库。另外,这不是一项家庭作业。我只和一些朋友一起开展一个小项目。

+2

发布您的数据库作业问题不是获得技术工作的好方法。不过我不喜欢。 –

+0

@TimBiegeleisen那么,这是一个常见的作业问题,或者你如何得出这个结论?我不明白为什么这个问题会得到如此多的预测,除此之外可能更重要。 – fancyPants

+0

@fancyPants我没有倒下它。 –

回答

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