sql >> Database >  >> RDS >> Database

Hoe u de roosters van werknemers in een database kunt opslaan

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

  1. Gebruik een surrogaat-primaire sleutel wanneer waarden in de natuurlijke sleutel mogelijk veranderen of wanneer een natuurlijke sleutel te complex zou zijn.
  2. 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 04-02-2015 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.


  1. SQL Server - definiëren van een XML-type kolom met UTF-8-codering

  2. Hoe te controleren of PostgreSQL-array waarde bevat?

  3. Is er een Entity Framework 7 Database-First POCO Generator?

  4. PostgreSQL geeft gegevens van recursieve CTE door aan functie