Estrutura de Armazenamento dos campos no banco de dados
No sistema, os campos são armazenados em dois locais diferentes, em um JSON com todos os campos juntos e na tabela da entidade.
-
JSON do Formulário
- O sistema gera um JSON contendo todos os dados de cada formulário, incluindo os campos numéricos, inteiros e de data e hora, e armazena esse JSON na tabela
tbl_formulario
. - Esse JSON serve como um registro completo das informações enviadas pelo usuário, sendo útil também para auditoria de dados.
- O sistema gera um JSON contendo todos os dados de cada formulário, incluindo os campos numéricos, inteiros e de data e hora, e armazena esse JSON na tabela
-
Tabela da Entidade - Campo VARCHAR
- Este campo armazena o valor recebido em "string", sem conversões. O tipo VARCHAR foi mantido por questões de compatibilidade com o sistema legado.
-
Tabela da Entidade - Campos tipados
- Campos booleanos, são gravados como smallint (0 ou 1), com exceção do campo "deletado", esse esta gravado como true or false
- Campos com tipos específicos, como numéricos, inteiros e de data e hora, têm uma coluna adicional que armazena o valor tipado e convertido:
-
Numéricos e Inteiros: Os campos numéricos possuem o sufixo
__number__
e os inteiros seguem a mesma estrutura, facilitando operações e consultas. Exemplo:campo__number__
. O tipo do campo é numeric no postgresql -
Data e Hora (Datetime): Os campos de data e hora possuem o sufixo
__datetime__
. Exemplo:campo__datetime__
. o tipo do campo édate
para campos que sõ tem Data etimestamp
para campos com date e hora
-
Numéricos e Inteiros: Os campos numéricos possuem o sufixo
Observações Importantes
-
Exibição de Dados: Na listagem, é sempre utilizado o campo com o sufixo tipado (
__number__
ou__datetime__
), pois ele contém o valor devidamente convertido, garantindo precisão nas operações. -
Máscara de Formatação no Formulário: No formulário de entrada de dados, uma máscara em JavaScript é aplicada ao
campo
, formatando o valor conforme o padrão do JSON. Essa máscara pode causar discrepâncias se houver uma incompatibilidade entre os formatos de entrada e o armazenamento no PostgreSQL.
Possíveis Problemas e Soluções
-
Diferença no Valor Armazenado: Para valores numéricos, caso o valor enviado pela API contenha vírgulas (por exemplo, "3,31"), pode ocorrer uma interpretação incorreta durante a conversão para o formato numérico, transformando o valor
3,31
em331
. - Recomendações: Nas Apis, e regras, sempre manter o padrao no formato ingles 99999.99 com ponto. Sugere-se validar e formatar os dados enviados para garantir que o sistema receba sempre o formato correto. A padronização dos dados de entrada evita diferenças entre os valores no campo VARCHAR e nos campos tipados com sufixo.