Bom dia
Abaixo seguem reflexões para expor a minha principal dúvida que é em relação a gerar histórico de alteração de informações
Considerando as modelagens abaixo como um exemplo real (mesmo que conceitual, pode-se imaginar que a partir dela já seria feito o modelo físico / criação do banco. Qual a melhor ou forma mais indicada para se armazenar históricos de alteração dos dados das tabelas e seus relacionamentos
REFLEXÃO: na primeira abordagem abaixo, é um exemplo clássico em que na minha percepção eu iria conseguir somente ter o histórico de qual administrador realizou a criação do restaurante, e que ficaria restrito a existir um restaurante somente atrelado a um único administrador, ou seja, não seria possível saber em uma situação de UPDATE, qual administrador alterou qual restaurante e quais informações / campos sofreram mudanças.
Diante do exposto logo acima, pensei em uma possível forma de armazenar o histórico de alterações, conforme segunda abordagem abaixo: Ao criar uma entidade associativa (ADMINISTRATOR_RESTAURANT) que armazena o ID do administrador + ID do restaurante e data de modificação, logo eu conseguiria identificar qual o administrador que alterou um determinado restaurante e quando foi realizada tal alteração. Porém, para que eu consiga saber quais informações foram alteradas, eu teria que REPLICAR os mesmos campos que existem em Restaurant, nesse entidade associativa (como tal está na segunda imagem, com os campos OPENING_HOURS, STATUS, NAME, CATEGORY)
Com essa abordagem, eu conseguiria manter o histórico das alterações, porém seguem os questionamentos:
- Será que replicar os mesmos campos existentes em Restaurant nessa entidade associativa Administrator_Restaurant, seria adequado? uma vez que se caso o administrador alterar somente um campo (ex: NAME), os demais ficaria NULL ?
- Na grande maioria dos casos, encontro modelagens igual a abordagem 1 abaixo, porém, como que realizam o controle e histórico de atualizações?
- Realizando pesquisas, alguns utilizam técnicas de log de auditoria de transação, isso seria o suficiente (caso positivo, há algum curso na plataforma que abrange o tema a fundo?), ou há uma abordagem mais generalista e recomendada?
- Conforme referência (https://dirceuresende.com/blog/sql-server-como-criar-um-historico-de-alteracoes-de-dados-para-suas-tabelas-logs-auditoria/) o autor sugere o uso de Trigger para cada tabela do banco, mas isso pode ser "custoso" se forem inseridas novas colunas na tabela e ter que ficar adicionando também na tabela correspondente da trigger.
- É recomendado implementar logs do lado da aplicação (desenvolvedor) ou do lado do Banco de Dados? pois pelo que vi, se for escolhido pelo lado da aplicação, não será possível rastrear usuários que alterarem diretamente via query o banco de dados, mas sim somente usuários que fizeram a autenticação e possuem login ao lado da aplicação
- Se no lado da aplicação (desenvolvedor) adotar o uso de ORM (mapeamento de objeto relacional), todo esse conceito de gerenciar logs via triggers é perdido, existe alguma abordagem?
- Em resumo, considerando a modelagem e implementação de um projeto real genérico e toda a reflexão acima, qual a metodologia mais comum para se gerenciar histórico de atualizações de dados?
1) PRIMEIRA ABORDAGEM
2) SEGUNDA ABORDAGEM
Obrigado
Felipe D.R