Database
1. Visao geral
O banco de dados do Dashboard foi modelado para sustentar a operacao principal do sistema: controle de colaboradores, clientes, materiais, pedidos e pagamentos. Ele segue um modelo relacional e foi pensado para manter a integridade das informacoes, facilitar consultas gerenciais e permitir a evolucao da aplicacao.
Na implementacao atual, o banco trabalha com PostgreSQL e se conecta ao backend por meio do SQLAlchemy e do driver psycopg2-binary.
2. Modelo conceitual
A imagem abaixo representa o modelo conceitual das entidades principais do sistema e seus relacionamentos:
3. Tabelas do banco
roles
Tabela responsavel por definir os papeis de acesso dos usuarios do sistema.
id: identificador unico da role. Chave primaria.nome: nome da role, comoADMIN,GERENTEouVENDEDOR.nivel_acesso: valor numerico usado nas regras de permissao.
Essa tabela existe para centralizar a autorizacao do sistema e evitar que as permissoes fiquem espalhadas diretamente no cadastro dos colaboradores.
colaboradores
Tabela que armazena os usuarios internos que utilizam a aplicacao.
id: identificador unico do colaborador. Chave primaria.nome: nome completo do colaborador.email: email do usuario. Possui restricao de unicidade.senha: senha armazenada em hash.telefone: telefone de contato.role_id: chave estrangeira pararoles(id).
Cada colaborador pertence a uma role, e isso define o que ele pode visualizar, editar ou excluir dentro da API.
clientes
Tabela de cadastro dos clientes atendidos pela empresa.
id: identificador unico do cliente. Chave primaria.nome: nome do cliente ou da empresa.email: email de contato.telefone: telefone de contato.cpf_cnpj: documento principal do cliente. No backend, esse campo e tratado com criptografia.hash_cpf: hash derivado do documento, usado como apoio de seguranca e consistencia.endereco: endereco principal do cliente.observacoes: campo livre para anotar informacoes complementares.
Essa tabela concentra os dados cadastrais e serve como base para o historico comercial do sistema.
materiais
Tabela que registra os materiais usados nos pedidos.
id: identificador unico do material. Chave primaria.tipo: categoria do material, como acrilico ou policarbonato.cor: cor do material.espessura: espessura cadastrada para o item.altura: altura do material.largura: largura do material.preco_m2: preco por metro quadrado.
Ela permite que os pedidos sejam compostos por itens reais de producao, o que aproxima o banco da rotina operacional da empresa.
pedidos
Tabela central do sistema, que guarda as informacoes de cada pedido.
id: identificador unico do pedido. Chave primaria.colaborador_id: chave estrangeira paracolaboradores(id).cliente_id: chave estrangeira paraclientes(id).descricao: descricao do pedido.valor: valor total do pedido.data_entrada: data em que o pedido entrou no sistema.data_entrega: data prevista de entrega.horario_entrega: horario previsto de entrega.status_pedido: status operacional do pedido.
Observacao importante:
A estrutura inicial do banco define os campos essenciais do pedido, e o modelo atual utilizado pelo backend tambem considera horario_entrega para representar melhor a operacao de entrega.
pedido_materiais
Tabela associativa que liga pedidos e materiais.
id: identificador unico do registro. Chave primaria.pedido_id: chave estrangeira parapedidos(id).material_id: chave estrangeira paramateriais(id).quantidade: quantidade do material usada naquele pedido.
Essa tabela existe porque um pedido pode ter varios materiais, e um mesmo material pode aparecer em varios pedidos. Ou seja, ela resolve um relacionamento muitos-para-muitos.
pagamentos
Tabela usada para registrar os pagamentos vinculados aos pedidos.
id: identificador unico do pagamento. Chave primaria.pedido_id: chave estrangeira parapedidos(id).forma_pagamento: forma usada para pagamento.status_pagamento: situacao do pagamento.valor_pago: valor efetivamente pago.data_pagamento: data em que o pagamento foi registrado ou efetuado.
Essa tabela permite acompanhar recebimentos e calcular valores recebidos e em aberto no dashboard.
4. Relacionamentos entre as tabelas
roles 1:N colaboradores
Uma role pode estar associada a varios colaboradores, mas cada colaborador pertence a apenas uma role.
colaboradores 1:N pedidos
Um colaborador pode criar varios pedidos, mas cada pedido esta ligado a um unico colaborador responsavel.
clientes 1:N pedidos
Um cliente pode ter varios pedidos ao longo do tempo, mas cada pedido pertence a um unico cliente.
pedidos 1:N pagamentos
Um pedido pode possuir um ou mais registros de pagamento, enquanto cada pagamento pertence a apenas um pedido.
pedidos N:N materiais
Esse relacionamento nao acontece diretamente. Ele e resolvido pela tabela pedido_materiais.
Na pratica:
- um pedido pode usar varios materiais;
- um material pode aparecer em varios pedidos;
pedido_materiaisguarda a quantidade usada em cada associacao.
5. Chaves primarias e estrangeiras
Chaves primarias
Todas as tabelas principais usam id como chave primaria:
roles.idcolaboradores.idclientes.idmateriais.idpedidos.idpedido_materiais.idpagamentos.id
Chaves estrangeiras
As ligacoes entre entidades sao feitas por:
colaboradores.role_id -> roles.idpedidos.colaborador_id -> colaboradores.idpedidos.cliente_id -> clientes.idpedido_materiais.pedido_id -> pedidos.idpedido_materiais.material_id -> materiais.idpagamentos.pedido_id -> pedidos.id
Essas chaves sao fundamentais para garantir integridade referencial no banco de dados.
6. Regras e observacoes importantes
Seguranca dos dados
Alguns dados sao tratados com protecao especial no backend:
senhae armazenada com hash;cpf_cnpje armazenado com criptografia;hash_cpffunciona como apoio para seguranca e processamento sem expor diretamente o documento.
Integridade de negocio
O backend aplica validacoes para impedir inconsistencias, por exemplo:
- um pedido nao pode ser criado para um cliente inexistente;
- um item de
pedido_materiaisnao deve apontar para material inexistente; - pagamentos ficam sempre vinculados a um pedido;
- colaboradores dependem de uma role valida para o controle de acesso.
Inicializacao do banco
O processo de inicializacao do banco nao apenas cria tabelas. Ele tambem:
- insere roles padrao;
- cria o usuario administrador inicial;
- migra senhas antigas para hash;
- migra documentos de clientes para formato criptografado.
7. Leitura funcional do modelo
Do ponto de vista do negocio, o banco funciona assim:
- primeiro existem as roles, que definem perfis de acesso;
- depois os colaboradores usam essas roles para operar o sistema;
- os clientes sao cadastrados como base comercial;
- os materiais representam os insumos ou itens usados na producao;
- os pedidos conectam cliente, colaborador e valor comercial;
pedido_materiaisdetalha o que foi usado em cada pedido;pagamentosregistra o retorno financeiro ligado aos pedidos.
Esse desenho permite atender tanto o lado operacional quanto o lado gerencial do sistema.
8. Consideracoes finais
O banco de dados do projeto foi estruturado de forma simples, mas suficiente para representar bem o dominio da aplicacao. Ele possui entidades claras, relacionamentos coerentes e suporte tanto para rotinas operacionais quanto para consultas do dashboard.
O modelo tambem demonstra preocupacao com seguranca, rastreabilidade e expansao futura, o que torna a base de dados adequada para sustentar o crescimento do sistema.