2017-08-14 2 views
0

Sagen wir, ich habe 3 Tabellen:Designing Tabellen für Arbeit bietet

employers : id | name | ... 

workers: id | name | ... 

jobs : id | description | employer_id | ... 

ich die Arbeitgeber wollen ein Jobangebot auf mehrere Arbeiter in der Lage zu machen, so dass der erste Arbeiter ein Angebot zu akzeptieren, bekommt den Job . Ich habe Mühe, einen Tisch zu entwerfen, um dieses Problem anzugehen.

kam ich mit einer Tabelle wie folgt auf:

offers: id | job_id | worker_id | status 

JOB_ID und worker_id würden jeweils Arbeitsplätze und Arbeiter Referenzierung ein fk sein. Der Status ist ein ENUM mit "accepted", "pending" and "closed" as possible values. (the default value is "pending")

Die Idee dabei ist, dass, wenn ein Arbeitnehmer ein Angebot akzeptiert, wird der Status der entsprechenden Zeile in bietet wird auf „akzeptiert“ und die Zustände der anderen Angebote (über den gleichen Job) sind auf "geschlossen" gesetzt.

Ich denke, das könnte funktionieren, aber immer noch wollen Sie fragen, ob Sie denken, dies ist eine gute und effektive Lösung. Wenn nicht, was wäre eine bessere Lösung.

Dank

Hinweis: Dies ist mein erstes Mal versucht, eine Datenbank zu entwerfen. Auch das ist keine Hausaufgabe. Ich arbeite gerade an einem kleinen Projekt mit ein paar Freunden.

+2

Das Posten Ihrer Datenbank-Hausaufgaben-Fragen ist kein guter Weg, um einen Tech-Job zu bekommen. Nicht meine Downvotes. –

+0

@TimBiegeleisen Also, ist das eine häufige Hausaufgabe oder wie kommst du zu dieser Schlussfolgerung? Ich verstehe nicht, warum die Frage so viele Downvotes bekommen hat, abgesehen davon könnte es mehr auf den Punkt gebracht werden. – fancyPants

+0

@fancyPants Ich habe es nicht downvote. –

Antwort

1

Das kann ja funktionieren. Ein Problem, dem Sie gegenüberstehen, ist, dass Sie sicherstellen müssen, dass nur einer der Mitarbeiter den Job annimmt, nicht zwei gleichzeitig.

In Ihrem Fall würden Sie dies folgendermaßen:

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

Natürlich gibt es andere Entwürfe vorstellen kann, auch. Aber das hängt wirklich davon ab, was Sie erreichen wollen. Zum Beispiel könnten Sie das Statusfeld komplett loswerden, wenn Ihnen der Unterschied zwischen pending und closed nicht wirklich wichtig ist. Dann können Sie einfach in offers speichern, welcher Arbeiter der Job angeboten wurde und in der Jobtabelle können Sie eine Spalte accepted_by haben.

Verwandte Themen