Pergunta

Tenho o desafio de projetar um novo banco de dados usando um RDBMS, Oracle, para ser mais preciso.Neste banco de dados haverá um registro/documento específico que pode abranger várias tabelas.

Com o mínimo de duplicação possível, quero acompanhar as alterações feitas neste registro e oferecer uma maneira simples de criar cópias alteradas desse registro.

Eu não quero um história tabela que irá resumir as alterações no texto, pois quero poder buscar document x exatamente do jeito que parecia time t.Mas também não quero ter uma cópia completa de cada entrada do histórico.

Existem melhores práticas ou padrões como conseguir isso?

Posso ter uma ideia de como resolver isso usando uma estratégia que imita git, mas eu queria algumas opiniões antes de seguir esse caminho.

Foi útil?

Solução

Especificamente no Oracle 12c, há um novo recurso chamado "consultas de flashback temporal" que serve exatamente a esse propósito.(Recursos semelhantes estão disponíveis em outros bancos de dados:DB2, SQL Server, Vertica, para citar alguns.)

Para ativar consultas temporais você:

  1. Certifique-se de que cada uma das tabelas que representam o seu documento tenha um par de datas indicando a data (hora) de início e término em que um registro específico era válido (ativo) e
  2. Mantenha os registros históricos não atualizando-os, mas inserindo novas versões dos registros, atualizando apenas as datas finais dos registros históricos.

Você poderá então emitir consultas em suas tabelas que se parecem muito com SELECT whatever FROM mytable AS OF some_date, que retornaria os registros que estavam ativos na data especificada.

Você pode ler o descrição detalhada aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a dba.stackexchange
scroll top