2017-08-14 46 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

相關問題