Jak przechowywać czas w bazie danych

0

Cześć, mam taką relację w projekcie:

Worker one to many Shifts

Założyłem, że w tabeli Shifts, będą następujące kolumny: Id, WorkerId, DateFrom, DateTo. Teraz już na etapie rozwoju wiem, że było to bez sensu, bo w polach typu datetime na bazie danych muszę podać konkretną datę, a w projekcie potrzebuję jedynie godzin i minut aby przełożyć to na grafik pracownika. Pytanie jak powinienem taką wartość przechowywać? Jako string?
Przykładowy rekord wyglądałby wówczas tak:

Id WorkerId TimeFrom TimeTo
1 2 08:00 16:00
0

Najpierw bym BARDZO wyraźnie rozgraniczył

  • schemat (regułę na tydzień czy jakiś tam okres), zwykle używaną do generowania poniżej
  • realnie umieszczane w czasie, choćby przymiarka, ze już nie wspomnę o zatwierdzonych. W Biedrze jak stałem to się Kaśka z Baśką zamieniały na (tylko) czwartek.

Schemat by się nie bał nawet mini-języka:
5.08:00.16:00 // pięc dni w tygodniu
ale też
s.07:00.13:00 // sobota
5.21:00+08 // 8 godzin 5 dni w tygodniu od 21

Nie siedzę w Twoim projekcie, i być może to rozważanie w przestrzeni kosmicznej

2

Nie podałeś dystrybucji bazy więc napiszę tak w postgresql masz typ time

fieldname TIME(6) WITHOUT TIME ZONE,

w oracle jest to bardziej złożone (jeśli chcesz faktycznie tylko czas tam trzymać). Można to ogarnąć poprzez interval:
https://www.oracletutorial.com/oracle-basics/oracle-interval/
ale też się to da ogarnąć np tak:

TO_CHAR(SYSDATE, 'HH24:MI:SS');

nie używałem ale w sql serverze też jest time:
https://docs.microsoft.com/en-us/sql/t-sql/data-types/time-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15

mysql coś tam takiego też ma:
https://dev.mysql.com/doc/refman/5.7/en/time.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1