esquema da base de dados para a folha de tempo
armazenar horas por dia para um período de tempo (2 semanas ) para diferentes projetos. Ex pessoa a pode colocar 3 horas para o projecto e 4 horas para o projectB no mesmo dia
torná-lo de modo que é fácil de obter um relatório sobre o total de horas colocadas para um projeto, ou para obter horas totais em todos os projetos por uma determinada pessoa
editar: outro a exigência seria que cada folha de tempo para um determinado período de tempo para cada pessoa precisa ter um campo indicando que a pessoa apresentou a folha de tempo e outro dizendo que foi aprovado
5 answers
Empréstimo de Eric Petroelje & mdma:
Employee
- EmployeeID (PK)
- EmployeeName
- Other_fields
Project
- ProjectID (PK)
- ProjectName
- Other_fields
WorkSegment
- WorkSegmentID (PK)
- ProjectID (IX1)
- EmployeeID (IX2)
- Date (IX1, IX2)
- StartTime
- EndTime
- PayrollCycleID (FK)
O primeiro índice do sector do trabalho é a data do projecto. O segundo índice do sector do trabalho é o emprego, Data. Estes índices não são únicos. Isto é para que uma pessoa possa trabalhar em um projeto mais de uma vez em um dia. Os índices permitem comunicar as horas de trabalho por projecto ou por pessoa.
Cada linha de trabalho é para um segmento de tempo, um dia, um projecto. Cada empregado tem tantas linhas de trabalho como é necessário para descrever o ciclo de pagamentos dele.TimeSheetSegment
- TimeSheetSegmentID (PK)
- ProjectId (FK)
- EmployeeId (FK)
- PayrollCycleID (FK)
Existe um índice único sobre o projecto, o emprego e o subsídio de desemprego. Há uma linha de segmentação de tempo para cada projeto para o qual um empregado trabalha durante um ciclo de folha de pagamento.
TimeSheet
- TimeSheetID (PK)
- EmployeeID (IX)
- PayrollCycleID (IX)
A linha TimeSheet reúne as linhas TimeSheetSegment e WorkSegment. O índice EmployeeID, PayrollCycleID é único.
Approval
- TimeSheetID (PK)
- PayrollCycleID (FK)
- SubmittedTimestamp
- ApproverID (FK)
- ApprovedTimestamp
A linha de homologação é criada aquando da apresentação do calendário. Estes campos podem fazer parte da tabela de TimeSheet. Eu quebrei eles para fora com uma normalização de quarta ordem, porque a tabela de aprovação é provável que tenha permissões de acesso de banco de dados diferentes da tabela de TimeSheet.
PayrollCycle
- PayrollCycleID (PK)
- PayrollCycleYear
- PayrollCycleNumber
- StartDate
- EndDate
- DirectDepositDate
- CheckDate
- Other_fields
A tabela PayrollCycle normaliza alguns dos campos de datas, e fornece uma chave inteira que torna mais fácil reunir as linhas de repartição do trabalho e de repartição do tempo para fazer uma folha de tempo coerente.
Project
-------
ProjectId PK
ProjectName varchar(200)
Employee
---------
EmployeeId PK
EmployeeName (or first name/last name etc..)
// .. other employee attributes
ProjectTimesheet
----------------
ProjectTimesheetId PK
ProjectId FK -> Project.ProjectId
EmployeeId FK -> Employee.EmployeeId
StartTime DATETIME
EndTime DATETIME
Approved bit
Editar: em alternativa à opção aprovada em cada linha de tempo do projecto, poderá separar o estado aprovado para uma tabela separada. Por exemplo, para permitir a aprovação da folha de tempo de um empregado durante um determinado período, um gestor adicionaria uma entrada de aprovação à tabela de aprovação:
Approval
--------
ApprovalID PK
EmployeeId FK -> Employee.EmployeeId
StartTime DATETIME
EndTime DATETIME
ApprovedBy FK -> Employee.EmployeeId (e.g. the manager)
ApprovedDate timestamp // date the approval was registered
Uma tabela para as pessoas (1)
Um quadro para projectos (2)
Uma tabela para reservas ( 3) - Quem fez o trabalho (FK em 1), em que projeto eles trabalharam (FK em 2), quando eles fizeram o trabalho, quanto trabalho eles fizeram.
Seleccione a sum (time_book) de (3) onde a pessoa é igual (algum id de 1) e project = (algum ID de 2)
Ou
Seleccione a sum (time_book) de (3) onde a pessoa é igual a (algum id de 1)
Etc...
People
- PersonID (PK)
- PersonName
- Other fields
Projects
- ProjectID (PK)
- ProjectName
- Other fields
WorkTime
- TimeID (PK)
- ProjectID (FK)
- PersonID (FK)
- StartTime
- EndTime
O seguinte código é retirado do ]project-open [ open-source system na sintaxe PostgreSQL e editado.
Por favor note a tabela "conf_objects" com informação de aprovação/confirmação. Quando o usuário "submete" uma folha de tempo, todas as horas enviadas são atribuídas a um novo conf_object. É tarefa do supervisor definir o status do conf_object para "aprovado". Tanto o supervisor como o usuário podem excluir o conf_object a qualquer momento, o que marcará as horas como "não submetido" (hora.conf_object_id = NULL), De modo que estas horas terminarão no relatório" horas não submetidas".
CREATE TABLE projects (
project_id integer constraint projects_pk primary key,
project_name text not null,
parent_id integer constraint projects_parent_fk references projects,
[...]
project_type_id integer not null constraint projects_prj_type_fk references categories,
project_status_id integer not null constraint projects_prj_status_fk references categories,
description text,
start_date timestamptz,
end_date timestamptz
);
CREATE TABLE users (
user_id integer constraint users_pk primary key,
first_names text,
last_name text
[...]
);
-- Confirmation (=approval) objects
CREATE TABLE conf_objects (
conf_id integer constraint conf_id_pk primary key,
conf_status_id integer constraint conf_status_nn not null
);
CREATE TABLE hours (
user_id integer constraint hours_user_id_nn not null constraint hours_user_id_fk references users,
project_id integer constraint hours_project_id_nn not null constraint hours_project_id_fk references projects,
day date constraint hours_day_nn not null,
hours numeric(5,2) not null,
[...]
note text,
conf_object_id integer constraint hours_conf_object_fk references conf_objects
);
As instruções originais ]po[ SQL estão incluídas na ~/packs/intranet-*/sql/postgresql/intranet-*-create.scripts de criação sql.