O modelo é centrado na tabela users, que é a principal entidade do sistema. As demais tabelas se relacionam a partir dessa entidade.
-
Usuário (
users):- Armazena as informações principais do usuário.
- Cada
userpode estar vinculado a uma pessoa (persons) ou ter várias, indicando a quem cada pessoa pertence. - A tabela
permissionsdefine as permissões do usuário. Cadauserpode ter várias permissões. - A tabela
authenticationsarmazena os tokens de autenticação, permitindo que um usuário tenha múltiplos tokens.
-
Pessoa (
persons):- Armazena dados pessoais básicos de uma pessoa, mas só tem valor quando associada a um
user. - Se o
personIdestá nouser, a pessoa é o próprio usuário. Se ouserIdestá noperson, a pessoa pertence ao usuário e só ele tem acesso a ela.
- Armazena dados pessoais básicos de uma pessoa, mas só tem valor quando associada a um
-
Funcionário (
employees):- Marca uma pessoa como funcionário, com dados adicionais como salário, cargo, etc.
- Permite expandir o modelo facilmente, adicionando dados específicos de funcionários sem afetar a estrutura dos dados pessoais.
-
Logs e Auditoria:
- A tabela de logs, gerida pelo
repositorioBase, registra ações realizadas pelosuserspara garantir a rastreabilidade e integridade das operações.
- A tabela de logs, gerida pelo
- O banco foi projetado para flexibilidade e escalabilidade.
- Relacionamentos:
- 1:N entre
usersepersons(um usuário pode ter várias pessoas associadas). - M:N entre
usersepermissions(um usuário pode ter várias permissões e uma permissão pode ser atribuída a vários usuários). - 1:N entre
userseauthentications(um usuário pode ter vários tokens). - 1:1 entre
personseemployees(uma pessoa pode ser um funcionário ou não).
- 1:N entre
- Uma tabela
customersassociada apersonspode ser criada no futuro para categorizar pessoas como clientes, se necessário.