Nível:Iniciante
Muitas organizações enfrentam o problema comum de armazenar agendas de funcionários. Não importa a instituição:uma empresa, uma universidade ou simplesmente uma pessoa física, muitas entidades precisam de um aplicativo para visualizar os horários. Por isso, tentarei criar um modelo de banco de dados e depois, em um artigo futuro, falaremos sobre um aplicativo simples para armazenar os horários dos funcionários em um banco de dados.
Atualmente o design é o seguinte:
O modelo é bem simples.
Dica – Estratégias-chave naturais e substitutas
- Use uma chave primária substituta sempre que os valores da chave natural puderem ser alterados ou quando uma chave natural for muito complexa.
- Se uma chave candidata natural consistir em um pequeno número de colunas (idealmente apenas uma) e seus valores não mudarem, use-a como uma chave primária natural
Saiba mais sobre chaves primárias naturais e substitutas.
O
employee
A tabela contém atributos básicos que descrevem cada funcionário, por exemplo:nome, sobrenome, endereço e telefone. Nome e sobrenome não identificam exclusivamente cada registro (pode haver mais de uma pessoa com o mesmo nome e sobrenome), por isso uma nova coluna foi introduzida (id
), chamado de chave substituta . A
schedule
tabela contém os dias e horas em que cada funcionário está no trabalho. O work_date
coluna especifica um dia em que cada funcionário estava trabalhando. O start_work_hour
e end_work_hour
colunas identificam as horas de trabalho para aquele dia. Vamos supor que temos um funcionário chamado Peter. Ele estava no trabalho em 4 de fevereiro e marca seu horário de início e término na programação.
A linha correspondente na
schedule
tabela fica assim:id | employee_id | data_trabalho | start_work_hour | end_work_hour | é_feriado | é_fim de semana |
1 | 1 | 10 | 16 | 0 | 0 |
Ao construir tal sistema, podemos querer saber quem trabalhou mais noites ou quem trabalhou mais fins de semana/feriados. Para gerar relatórios que contenham tais informações, as colunas
is_holiday
e is_weekend
foram introduzidos. Usando essa abordagem, você precisará ter uma tabela separada para feriados que contenha as datas dos feriados da empresa. Quando um funcionário insere seu horário de trabalho, as colunas
is_holiday
e is_weekend
pode ser atualizado usando um gatilho. Após inserir a data e hora, o trigger verificará se a data é feriado ou final de semana e inserirá o valor correto no campo.