Memorizzazione dei dati di frequenza nel database

1

Quindi devo archiviare la presenza giornaliera dei dipendenti della mia organizzazione dalla mia domanda. La parte in cui ho bisogno di aiuto è il modo efficiente di memorizzare i dati di presenza. Dopo alcune ricerche e brain storming, ho trovato alcuni approcci. Potrebbe indicarmi quale è il migliore e tutti gli effetti negativi non ovvii degli approcci menzionati. Gli approcci sono i seguenti

  1. Crea una singola tabella per l'intera organizzazione e memorizza empid, date, presentstatus come riga per ogni impiegato ogni giorno.
  2. Crea una singola tabella per l'intera organizzazione e archivia una singola riga per ogni giorno con una stringa delimitata da virgole di numeri interi che sono assenti. Genererò la stringa sulla mia applicazione.
  3. Crea tabelle diverse per ogni reparto e segui il metodo 1.

Condividi le tue opinioni e fai menzione di altri buoni metodi

    
posta Ali Abbas 23.10.2012 - 20:17
fonte

3 risposte

7

Vorrei creare 3 tabelle: departments , employees e absences .

CREATE TABLE departments ( id ... );

CREATE TABLE employees (
  id ...,
  department_id INTEGER REFERENCES departments(id),
  ...
);

Ogni dipendente farebbe riferimento a un dipartimento. Se un dipendente era assente, dovresti creare un record di assenza nel database.

CREATE TABLE absences (
  ...
  employee_id INTEGER REFERENCES employee(id),
  absence_date DATETIME,
  ...
);

Quindi, ci sarebbe stata una riga nella tabella delle assenze per ciascun dipendente e il giorno in cui era assente.

Potresti escludere la tabella departments se non è importante.

    
risposta data 23.10.2012 - 20:27
fonte
2

In breve , per mantenere la tabella del database come compatta e altrettanto efficace come può essere, vorrei registrare SOLO giorni quando il dipendente era NON presente.

Inoltre, potresti avere qualche bandiera sulla tabella dei dipendenti per indicare che il dipendente non è attivo (era in pensione / licenziato) e saltare la registrazione della sua presenza.

    
risposta data 23.10.2012 - 20:28
fonte
2

Dopo aver visto il commento dell'Op su cosa farà con questi dati, ho pensato che potesse essere aggiunto alla risposta di axblount.

Avere una tabella di ricerca delle date: link

Una query che sarà difficile è calcolare i giorni lavorativi che si sono verificati in un dato intervallo di tempo.

Utilizza una tabella Festività. È possibile interrogare la tabella di ricerca delle date per trovare le date non presenti nella tabella Festività per scoprire quanti giorni ci si aspettava che funzionasse. È possibile calcolare anche le trattenute a pagamento.

    
risposta data 23.10.2012 - 21:45
fonte

Leggi altre domande sui tag