2017-08-14 3 views
0

のは、私は3つのテーブルがあるとしましょうを提供しています。私はその問題に取り組むためにテーブルを設計するのに苦労しています。デザインのテーブルが

私はこのようなテーブルを思い付いた:

offers: id | job_id | worker_id | status 

をJOB_IDとがそれぞれジョブ労働者を参照FKだろうworker_id。 状況はここでの考え方は、労働者が申し出を受け入れたとき、の対応する行のステータスがを提供することである"accepted", "pending" and "closed" as possible values. (the default value is "pending")

とENUMが「受け入れ」に設定すると、他の申し出(の状態です同じ仕事について)は「閉鎖」に設定されています。

私はこれがうまくいくと思っていますが、あなたがこれが良い、効果的な解決策だと思っているかどうか依頼したいと思っています。そうでない場合、よりよい解決策は何でしょうか。

ありがとうございました

注:初めてデータベースを設計しようとしています。また、これは宿題ではありません。私はちょうどいくつかの友達と小さなプロジェクトに取り組んでいます。

+2

データベースの宿題に関する質問を投稿することは、技術的な仕事を得る良い方法ではありません。私のdownvotesではない。 –

+0

@TimBiegeleisenこれは一般的な宿題の質問ですか、どうやってこの結論に来ますか?私は質問がなぜそれほど多くのdownvotesを持っているのか分からない。 – fancyPants

+0

@fancyPants私はそれをdownvoteしなかった。 –

答えて

1

これは有効です。あなたが直面している問題は、同時に2人ではなく、ただ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という列を含めることができます。

関連する問題