sql >> Database teknologi >  >> RDS >> Database

Løndatamodel

En løndatamodel giver dig mulighed for nemt at beregne dine medarbejderes løn. Hvordan fungerer denne model?

Uanset om du driver en lille eller stor virksomhed, har du brug for en form for lønløsning. Det er her, en lønansøgning kommer til nytte. Plus, jo større virksomheden er, jo sværere bliver det at håndtere medarbejdernes lønberegninger; her bliver en lønansøgning en nødvendighed. For at hjælpe dig med at forstå alle de data, der kræves til en sådan applikation, leder vi dig gennem en relateret datamodel.

Lad os se, hvordan vores løndatamodel fungerer!

Datamodel

Med at skabe denne datamodel forsøgte jeg at skabe en model, der er generelt anvendelig for enhver virksomhed. Der vil naturligvis altid være forskelle i regler, virksomhedspolitikker osv., der vil kræve, at modellen skal tilpasses til at dække behovene for en specifik lønsum. Principperne i denne model burde dog være relevante for de fleste organisationer.

Det skal bemærkes, at denne model blev skabt med flere antagelser:

  • Løn som aftalt i ansættelseskontrakt er per år.
  • Nettoløn (dvs. med visse beløb fratrukket skat osv.) udbetales til medarbejderne.
  • Løn udbetales månedligt.

Datamodellen består af fjorten tabeller og er opdelt i to emneområder:

  • Medarbejdere
  • Løn

For bedre at forstå modellen er det nødvendigt at gennemgå hvert fagområde grundigt.

Medarbejdere

Dette emneområde indeholder detaljerede oplysninger om medarbejdere. Den består af ni tabeller:

  • medarbejder
  • ansættelsesvilkår
  • job_titel
  • job_titelhistorie
  • afdeling
  • afdelingshistorie
  • by
  • land
  • køn

Den første tabel, vi vil se på, er medarbejderen bord. Den indeholder en liste over alle medarbejdere og deres relevante detaljer. Tabellens attributter er:

  • id – Et unikt ID for hver medarbejder.
  • fornavn – Medarbejderens fornavn.
  • efternavn – Medarbejderens efternavn.
  • job_titel-id – Referencer til job_title tabel.
  • afdelings-id – Henviser til afdelingen tabel.
  • gender_id – Refererer til kønnet tabel.
  • adresse – Medarbejderens adresse.
  • by_id – Henviser til byen tabel.
  • e-mail – Medarbejderens e-mail.
  • beskæftigelse_start – Datoen, hvor denne persons ansættelse startede.

Bemærk, at kolonnerne job_title_id og department_id er overflødige, da oplysningerne om aktuelle stillingsbetegnelser og afdelinger kan tilgås fra job_title_history og department_history tabeller. Vi vil dog beholde disse to kolonner i denne tabel for hurtigere adgang til oplysningerne.

Følgende er ansættelsesvilkårene bord. Den gemmer data om hver enkelt medarbejders løn, som aftalt i ansættelseskontrakten, og hvordan den har ændret sig over tid. Tabellens attributter er:

  • id – Et unikt ID for hvert sæt ansættelsesvilkår.
  • medarbejder-id – Henviser til medarbejderen tabel.
  • aftalt_løn – Den i ansættelseskontrakten anførte løn.
  • løn_startdato – Startdatoen for den aftalte løn.
  • løn_slutdato – Slutdatoen for den aftalte løn. Dette kan være NULL, fordi en løn muligvis ikke har nogen planlagt ændring.

job_titlen tabel er en liste over de stillingsbetegnelser, der kan tildeles forskellige virksomhedens medarbejdere, f.eks. analytiker, chauffør, sekretær, direktør osv. Tabellen har følgende egenskaber:

  • id – Et unikt ID for hver stillingsbetegnelse.
  • job_titel – Navnet på stillingsbetegnelsen. Dette er den alternative nøgle.

Vi har også brug for et bord til at gemme hver medarbejders jobtitelhistorik. Vi har brug for dette, fordi medarbejdere kan forfremmes, degraderes eller omplaceres i virksomheden. job_title_history tabel vil administrere disse oplysninger og vil bestå af følgende attributter:

  • id – Et unikt ID for jobtitlens historiske post.
  • job_titel-id – Referencer til job_title tabel.
  • medarbejder-id – Henviser til medarbejderen tabel.
  • startdato – Den dato, hvor medarbejderen første gang havde denne stillingsbetegnelse.
  • slutdato – Da medarbejderen holdt op med at have den stillingsbetegnelse. Dette kan være NULL, fordi medarbejderen i øjeblikket muligvis har denne stillingsbetegnelse.

Kombinationen af ​​job_title_id , medarbejder-id og startdato er den alternative nøgle til ovenstående tabel. En medarbejder kan kun få tildelt én stillingsbetegnelse på en given dato.

Den næste tabel er afdelingen bord. Dette vil blot vise alle virksomhedens afdelinger, såsom IT, Regnskab, Juridisk osv. Det indeholder to attributter:

  • id – Et unikt ID for hver afdeling.
  • afdelingsnavn – Navnet på hver afdeling. Dette er den alternative nøgle.

Medarbejdere kan også skifte afdeling i virksomheden. Derfor skal vi have en afdelingshistorie bord. Denne tabel gemmer følgende:

  • id – Et unikt ID for den pågældende afdelings historiske post.
  • afdelings-id – Henviser til afdelingen tabel.
  • medarbejder-id – Henviser til medarbejderen tabel.
  • startdato – Den dato, hvor en medarbejder begyndte at arbejde i en afdeling.
  • slutdato - Den dato, hvor en medarbejder stoppede med at arbejde i den afdeling. Dette kan være NULL, fordi medarbejderen muligvis stadig arbejder der.

Kombinationen af ​​department_id , medarbejder-id og startdato er den alternative nøgle. En medarbejder kan kun arbejde i én afdeling ad gangen.

Den næste tabel, vi vil tale om, er byen bord. Dette er en liste over alle relevante byer. Den har følgende attributter:

  • id – Et unikt ID for hver by.
  • bynavn – Byens navn.
  • country_id – Henviser til landet tabel.

landet bord er næste i vores model. Det er blot en liste over lande, og den indeholder følgende oplysninger:

  • id – Et unikt ID for hvert land.
  • land_navn – Landets navn. Dette er den alternative nøgle.

Den sidste tabel i dette emneområde er kønnet bord. Denne tabel viser alle køn. Den indeholder følgende attributter:

  • id – Et unikt ID for hvert køn.
  • kønsnavn – Navnet på køn.

Lad os nu analysere det andet emneområde.

Løn

Dette emneområde består af tabeller, der indeholder alle de data, der direkte påvirker lønberegningen for hver periode samt det beløb, der skal udbetales. Den består af fem borde:

  • løn_betaling
  • working_hours_log
  • arbejdstimersjustering
  • justering
  • adjustment_amount

Lad os nu se på hver tabel.

Den første tabel er løn_betaling . Den indeholder alle relevante detaljer om den løn, der udbetales til hver medarbejder og har følgende egenskaber:

  • id – Et unikt ID for hver løn.
  • medarbejder-id – Henviser til medarbejderen tabel.
  • bruttoløn – Bruttolønnen, som skal danne grundlag for yderligere tilpasninger.
  • netto_løn – Nettolønnen (dvs. det beløb, medarbejderen modtager efter forskellige fradrag).
  • lønperiode – Den periode, lønnen beregnes og udbetales for.

For det andet er working_hours_log bord. Den indeholder data om det antal timer, hver medarbejder har arbejdet, hvilket kan påvirke visse lønreguleringer. Denne tabel har følgende attributter:

  • id – Et unikt ID for hver logindtastning.
  • medarbejder-id – Henviser til medarbejderen tabel.
  • starttid – Det tidspunkt, hvor medarbejderen loggede ind, dvs. begyndte at arbejde for dagen.
  • sluttid – Når medarbejderen loggede ud. Det kan være NULL, fordi vi ikke kender det nøjagtige tidspunkt, før medarbejderen logger ud.

Den næste tabel, vi vil analysere, er arbejdstimersjustering . Denne tabel vil kun blive brugt i beregningen af ​​justeringer baseret på de arbejdede timer, dvs. dem der har en TRUE værdi i is_working_hours_adjustment i justering bord. Attributterne er som følger:

  • id – Et unikt ID for hver justering.
  • working_hours_log_id – Henviser til working_hours_log tabel.
  • adjustment_id - Henviser til justeringen tabel.
  • salary_payment_id – Henviser til lønbetaling bord. Denne værdi kan være NULL fordi salary_payment_id vil kun blive brugt én gang om måneden, når vi igangsætter en lønberegning.
  • adjustment_amount – Størrelsen af ​​justeringen.
  • adjustment_procent – Det procentvise beløb for justeringen. Dette vil blive brugt til historiske formål, da procentdelen kan ændre sig over tid.

Den næste tabel, vi vil tale om, er justeringen bord. Den indeholder information om alle de reguleringer, der anvendes til lønberegning, dvs. alle de skatter og bidrag, der har indflydelse på lønsummen. Den vil også indeholde alle de justeringer, der afhænger af de timer, der arbejdes og ikke arbejdes, såsom bonusser, overarbejde, sygeorlov og barsel. Til det har vi brug for følgende data:

  • id – Et unikt ID for hver justering.
  • adjustment_name – Et navn, der beskriver denne justering.
  • adjustment_procent – Det procentvise beløb for den bestemte justering.
  • is_working_hours_adjustment – Der er tale om en flagmarkering, hvis en justering direkte afhænger af arbejdstiden, f.eks. overarbejde, sygemelding mv.
  • is_other_adjustment – Dette er en flagmarkeringsjustering, som ikke gør direkte afhængig af arbejdstimer, såsom skattefradrag, sociale bidrag, arbejdsgiverbidrag osv.

Derefter skal vi bruge adjustment_amount bord. Det vil blive brugt til at beregne alle lønjusteringer undtagen dem, der allerede er i arbejdstimersjustering , dvs. dem, der har en TRUE-værdi i is_other_adjustment i justering bord. Tabellen indeholder følgende attributter:

  • id – Et unikt ID for hver indtastning af justeringsbeløb.
  • salary_payment_id – Henviser til lønbetaling tabel.
  • adjustment_id – Refererer til justeringen tabel.
  • adjustment_amount – Størrelsen af ​​hver beregnet justering.
  • adjustment_procent - Det procentvise beløb for justeringen. Det vil blive brugt til historiske formål, da procentdelen kan ændre sig over tid.

Lad mig give dig et eksempel på, hvordan tabellerne working_hours_log , justering af arbejdstimer , justering , og adjustment_amount arbejde sammen om at beregne en løn. Hver dag logger medarbejderen, hvornår han eller hun kommer på arbejde, og hvornår han eller hun tager afsted. Disse data kan ses i working_hours_log bord. Lad os sige, at vores medarbejder har arbejdet 10 timer overarbejde i en måned, og i henhold til virksomhedens politik vil han eller hun blive betalt 20 % mere i timen for hver time overarbejde. Ved at henvise til justeringen tabel, vil vi være i stand til at finde den nødvendige justering, altså overarbejde, som vil have en vis procentdel (20%). Vi har også is_working_hours_adjustment indstillet til TRUE. Ved at bruge data fra disse to tabeller vil vi være i stand til at beregne justeringen og gemme den i working_hours_adjustment bord.

Nu kan vi beregne alle andre justeringer, der ikke afhænger af arbejdstimerne. Dette vil blive gjort i adjustment_amount bord. Ligesom vi gjorde ovenfor, vil vi referere til justeringen tabel og find de justeringer, som vi skal bruge – f.eks. skattefradrag, socialsikringsbidrag eller arbejdsgiverbidrag – og deres relevante procentsatser. is_other_adjustment flag i justeringen tabel vil blive sat til TRUE for disse justeringer.

Baseret på disse beregninger kan vi gemme bruttoløn- og nettoløndata i løn_betaling bord.

Ved at gennemgå dette eksempel har vi dækket alt i vores datamodel!

Kan du lide løndatamodellen?

Jeg forsøgte at skabe en model, der kunne bruges i næsten alle situationer. Det er dog umuligt at inkludere alle de specifikke parametre, der påvirker lønberegningen, i en artikel af denne længde. Ved at dække generelle principper har jeg forsøgt at gøre denne model nyttig som et solidt grundlag for din løndatamodel.

Hvad synes du om løndatamodellen? Er det anvendeligt som en løsning til dine lønbehov? Har du fundet på noget andet? Er der specifikke problemer, du har fundet, som ville ændre datamodellen væsentligt? Sig din mening i kommentarfeltet.


  1. Skriv et tal med to decimaler SQL Server

  2. Sammenligning af fejltider for Amazon Aurora, Amazon RDS og ClusterControl

  3. Hvordan man deler en streng efter et bestemt tegn i SQL Server og opdaterer denne værdi til en bestemt kolonne

  4. Sådan returneres en liste over tilgængelige sorteringer i PostgreSQL