2012-04-13 10 views
1

Wir möchten ein Jobsystem erstellen, das es Anbietern ermöglicht, unterschiedliche Preise auf der Grundlage der Zeit anzugeben. Auf M-F von 9-17 Uhr könnten sie für eine bestimmte Arbeit, die sie samstags und sonntags von 10 bis 21 Uhr berechnen, 10 Dollar verlangen. Wie kann ich die Datenbank so gestalten, dass ich unterschiedliche Preise für verschiedene Zeiten verfolgen kann? Ich habe keine Standardzeiten, aber die Anbieter können frei wählen, wann sie wollen.Preise nach Kalender

Ich dachte an die folgende structue:

Preis

provider_id 
task_id 
price 
Mon 
Tues 
Wed 
Thurs 
Friday 
Saturday 
Sunday 
time_start 
time_end 

Also, wenn eine Aufgabe auf MF ist, dann wird eine „1“ für die Spalten Mo, Di eingegeben werden, ... ., aber für die Spalten Samstag, Sonntag wird eine 0 eingegeben.

+0

Mein erster Gedanke war Horror Sie haben sieben separate Spalten vs sagen eine einzelne Integer-Bitmaske für die Tage, aber ich denke, solange diese Bit-Spalten sind und nicht 32/64-Bit-Ganzzahlen, die wahrscheinlich nicht so schlecht ist. Ich könnte die Zeitdaten auch in eine andere Tabelle und einen Verweis aufteilen, anstatt sie in jede Aufzeichnung aufzunehmen, aber ich bezweifle, dass das auch wirklich einen großen Unterschied machen würde. Dies ist ein Teil des Problems, das die Leute lösen müssen, um wiederkehrende Ereignisse in einem Kalenderprogramm zu implementieren, so dass Sie vielleicht auf der Suche nach einigen davon sind. – Rup

Antwort

3

Ich würde das auf jeden Fall in mehrere Tabellen trennen. Sie können alles in einer Tabelle erledigen, aber letztendlich haben Sie mehr Flexibilität mit mehr Tabellen.

Ich würde die folgende Struktur vorschlagen:

ProviderTable

  • id
  • Name
  • alles andere Anbieter spezifische

TaskTable

  • id
  • Name
  • alles andere Aufgabe spezifische

Timetable

  • id
  • dayOfWeek Enum
  • starttime
  • endTime

Preisübersicht - miteinander verbinden Zeiten und Aufgaben

  • id
  • TimeID
  • taskID
  • Preis

Job Tabelle - miteinander zu verbinden, Preise und Anbieter

  • id
  • priceID
  • providerID
  • etwas anderes arbeitsplatzspezifische

Das mag wie eine Menge Arbeit vorne erscheinen, aber später, als Datenbank erweitert, werden Sie froh, dass Sie es getan haben.