Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando gatilhos como uma alternativa de função agregada SQL?


Em teoria, um gatilho pode manter uma tabela de resumo atualizada com precisão, desde que:
  • Você não desativa o acionador
  • Você não atualiza a tabela de resumo diretamente
  • Você não faz alterações nos dados de origem por meio de TRUNCATE TABLE (como você observou)

Também:
  • Você deve propagar a tabela de resumo com um valor inicial correto
  • Você deve usar o InnoDB tanto para a tabela de origem quanto para a tabela de resumo, portanto, as atualizações são atômicas

Manter uma tabela de resumo é um exemplo de desnormalização . Como em toda desnormalização, isso traz o risco de anomalias de dados. Você é responsável por manter a integridade dos dados; o banco de dados é limitado em quanto pode ajudá-lo a fazer isso.

Eu recomendo que você precise verificar novamente a tabela de resumo de tempos em tempos (por exemplo, de hora em hora pode ser suficiente) para garantir que ela não tenha saído de sincronia e corrigi-la se tiver. Cabe a você fazer isso, porque o banco de dados não pode verificar isso para você.