Niveau:Beginner
Zoveel organisaties worden geconfronteerd met het veelvoorkomende probleem van het opslaan van personeelsschema's. Het maakt niet uit welke instelling:een bedrijf, een universiteit of gewoon een individu, veel entiteiten hebben een applicatie nodig om roosters te bekijken. Daarom zal ik proberen een databasemodel te bedenken en in een toekomstig artikel zullen we het hebben over een eenvoudige applicatie om de roosters van medewerkers in een database op te slaan.
Momenteel ziet het ontwerp er als volgt uit:
Het model is vrij eenvoudig.
Tip - Natuurlijke en surrogaatsleutelstrategieën
- Gebruik een surrogaat-primaire sleutel wanneer waarden in de natuurlijke sleutel mogelijk veranderen of wanneer een natuurlijke sleutel te complex zou zijn.
- Als een natuurlijke kandidaatsleutel uit een klein aantal kolommen bestaat (idealiter slechts één) en de waarden ervan niet veranderen, gebruik deze dan als een natuurlijke primaire sleutel
Meer informatie over natuurlijke en surrogaat primaire sleutels.
De employee
tabel bevat basiskenmerken die elke werknemer beschrijven, bijvoorbeeld:naam, achternaam, adres en telefoonnummer. Naam en achternaam identificeren niet elk record op unieke wijze (er kunnen meer dan één persoon zijn met dezelfde naam en achternaam), daarom is een nieuwe kolom geïntroduceerd (id
), een surrogaatsleutel genoemd .
Het schedule
tabel bevat de dagen en uren waarop elke werknemer aan het werk is. De work_date
kolom specificeert een dag waarop elke werknemer werkte. Het start_work_hour
en end_work_hour
kolommen geven de werkuren voor die dag aan.
Laten we aannemen dat we een medewerker hebben die Peter heet. Hij was op 4 februari aan het werk en hij markeert zijn begin- en eindtijd in het schema.
De corresponderende rij in het schedule
tabel ziet er als volgt uit:
id | employee_id | werkdatum | start_work_hour | end_work_hour | is_holiday | is_weekend |
1 | 1 | 10 | 16 | 0 | 0 |
Bij het bouwen van zo'n systeem willen we misschien weten wie de meeste nachten heeft gewerkt of wie de meeste weekenden/vakanties heeft gewerkt. Om rapporten te genereren die dergelijke informatie bevatten, moeten de kolommen is_holiday
en is_weekend
werden geïntroduceerd.
Als u deze aanpak gebruikt, moet u een aparte tabel voor vakanties hebben die de data van de vakanties voor het bedrijf bevat. Wanneer een werknemer zijn werktijd invoert, worden de kolommen is_holiday
en is_weekend
kan worden bijgewerkt met behulp van een trigger. Na het invoeren van de datum en tijd, zal de trigger controleren of de datum een feestdag of weekend is en de juiste waarde in het veld invoegen.