AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 4215
Accepted
Benny Skogberg
Benny Skogberg
Asked: 2011-08-02 01:18:00 +0800 CST2011-08-02 01:18:00 +0800 CST 2011-08-02 01:18:00 +0800 CST

É sábio usar o gatilho para atualizar outra tabela?

  • 772

Eu tenho uma Objecttabela 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.ObjectTypetiver 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?

sql-server trigger
  • 3 3 respostas
  • 4694 Views

3 respostas

  • Voted
  1. Best Answer
    Matthew Watson
    2011-08-02T05:02:58+08:002011-08-02T05:02:58+08:00

    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

    • Acompanhando os campos "date_created" e "date_last_edited"
    • Inserindo "ID"'s (no oracle, onde não há campo de auto id)
    • Mantendo o histórico de alterações

    Coisas para as quais você não gostaria de usar gatilhos

    • regras/lógica de negócios
    • qualquer coisa que se conecte fora do banco de dados (por exemplo, uma chamada de webservice)
    • Controle de acesso
    • Qualquer coisa que não seja transacional (qualquer coisa que você fizer no gatilho DEVE ser capaz de reverter com a transação)
    • 9
  2. Marian
    2011-08-02T03:02:42+08:002011-08-02T03:02:42+08:00

    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.

    • 4
  3. Andrew Bickerton
    2011-08-04T00:19:14+08:002011-08-04T00:19:14+08:00

    Os gatilhos são uma ferramenta poderosa e, como qualquer outra ferramenta, você precisa ter cuidado ao usá-los.

    1. 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á ...

    2. 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?)

    • 3

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve