Poziom:początkujący
Tak wiele organizacji boryka się z powszechnym problemem przechowywania grafików pracowników. Bez względu na to, jaka instytucja:firma, uczelnia czy po prostu osoba fizyczna, wiele podmiotów potrzebuje aplikacji do przeglądania grafików. Dlatego postaram się wymyślić model bazy danych, a następnie w kolejnym artykule porozmawiamy o prostej aplikacji do przechowywania harmonogramów pracowników w bazie danych.
Obecnie projekt wygląda następująco:
Model jest dość prosty.
Wskazówka – naturalne i zastępcze kluczowe strategie
- Użyj zastępczego klucza podstawowego zawsze, gdy wartości w kluczu naturalnym mogą ulec zmianie lub gdy klucz naturalny byłby zbyt złożony.
- Jeśli naturalny klucz kandydujący składa się z niewielkiej liczby kolumn (najlepiej tylko jednej) i jego wartości się nie zmieniają – użyj go jako naturalnego klucza podstawowego
Więcej informacji o naturalnych i zastępczych kluczach podstawowych.
employee
tabela zawiera podstawowe atrybuty opisujące każdego pracownika, na przykład:imię, nazwisko, adres i numer telefonu. Imię i nazwisko nie identyfikują jednoznacznie każdego rekordu (może być więcej niż jedna osoba o tym samym imieniu i nazwisku), dlatego wprowadzono nową kolumnę (id
), zwany kluczem zastępczym .
schedule
tabela zawiera dni i godziny, w których każdy pracownik jest w pracy. work_date
kolumna określa dzień, w którym każdy pracownik pracował. start_work_hour
i end_work_hour
kolumny identyfikują godziny pracy w tym dniu.
Załóżmy, że mamy pracownika o imieniu Piotr. Był w pracy 4 lutego i zaznaczył swój czas rozpoczęcia i zakończenia w harmonogramie.
Odpowiedni wiersz w schedule
tabela wygląda tak:
id | identyfikator_pracownika | data_pracy | start_work_hour | end_work_hour | jest_wakacje | is_weekend |
1 | 1 | 10 | 16 | 0 | 0 |
Budując taki system, możemy chcieć wiedzieć, kto pracował najwięcej nocy lub kto pracował najwięcej weekendów/święt. Aby wygenerować raporty zawierające takie informacje, kolumny is_holiday
i is_weekend
zostały wprowadzone.
Stosując to podejście, będziesz potrzebować oddzielnej tabeli dla dni wolnych, która zawiera daty dni wolnych dla firmy. Gdy pracownik wprowadza swój czas pracy, kolumny is_holiday
i is_weekend
można zaktualizować za pomocą wyzwalacza. Po wstawieniu daty i godziny wyzwalacz sprawdzi, czy data jest dniem wolnym od pracy czy weekendem i wstawi poprawną wartość w polu.