Eu tenho uma Object
tabela que é preenchida de um serviço integrado ( que posso alterar se necessário ) de outro banco de dados. Em certos pontos, precisamos adicionar postagens manualmente em outra tabela, o ObjectObjectGroup (ObjectId, ObjectGroupId)
que é necessário se Object.ObjectType
tiver um determinado valor inteiro. Como o serviço de integração não lida com esse tipo de atualização, estou pensando em adicionar uma trigger na tabela Object que em pseudo-código seria a seguinte:
if Object.ObjectType = 10
begin
if Object.ObjectNumber like '<string pattern>'
begin
insert into ObjectObjectGroup values...
end
end
Essa configuração é inteligente ou existe uma maneira melhor em termos de desempenho?
Principalmente copiar/colar minha resposta desta pergunta no stackoverflow
Os gatilhos podem ser muito atraentes, quando você começa a usá-los, eles parecem uma solução mágica para todos os tipos de problemas. Mas, eles fazem coisas "mágicas" acontecerem, se você não conhece o banco de dados de dentro para fora, pode parecer que coisas realmente estranhas acontecem (como inserções em outras tabelas, alteração de dados de entrada, etc). Antes de implementar as coisas como um gatilho, eu consideraria seriamente impor o uso de uma API em torno do esquema (de preferência no banco de dados, mas fora, se você não puder).
Algumas coisas para as quais eu ainda usaria gatilhos
Coisas para as quais você não gostaria de usar gatilhos
Sim, é sábio. Na verdade, esse é o propósito de um gatilho, executar as ações necessárias após uma operação de inserção/atualização/exclusão em uma tabela.
Você precisa levar em consideração o fato de que um gatilho no MS SQL não irá lidar com cada linha separadamente, mas irá lidar com todas as linhas da transação atual de uma só vez. Portanto, se uma operação inserir 10 linhas de uma vez, você precisará pensar no código do seu gatilho para tratar todas as linhas de uma vez.
Os gatilhos são uma ferramenta poderosa e, como qualquer outra ferramenta, você precisa ter cuidado ao usá-los.
Quando você comete um erro em um gatilho, as coisas podem dar DRASTICAMENTE errado e, a menos que você esteja executando rastreamentos, não perceberá ...
Eles alteram/inserem/excluem dados 'magicamente' que o usuário do banco de dados (o aplicativo atual/qualquer aplicativo futuro/um desenvolvedor fazendo uma atualização única) não percebeu/pretendia.
O grande problema é que depois de criar o gatilho, não é óbvio para outros desenvolvedores/usuários que um gatilho está lá e o que ele faz.
Dito isso, eles são uma ótima ferramenta para manter a integridade de seus dados e para uma verdadeira auditoria de alterações.
Você precisa se perguntar se a lógica que deseja colocar no gatilho fica melhor com o(s) aplicativo(s) ou dentro do banco de dados, avaliando os riscos de ambos os lados (o que acontece se um novo aplicativo aparecer e não aplicar isso regra?)