2010-06-15 7 views
10

Duplicar posible:
Are database triggers evil?¿Cuándo se activan los desencadenadores de la base de datos?

Hay gran cantidad de información negativa en trigger, sólo quieren conseguir llevar de la comunidad sobre cuándo es bueno contra malo.

+1

Es porque los neófitos los usan sin el conocimiento adecuado para saber que existen alternativas más adecuadas. IE: "Hola, quiero hacer X.Lo sé, utilizaré un disparador ... "cuando un control o una restricción predeterminada es mejor, o peor, una restricción de clave externa. –

+0

(Respecto a mi votación cercana para esta pregunta: sé que has formulado tu pregunta un poco de manera diferente a la que sugerí, pero creo que las respuestas a la otra pregunta ya abordan aspectos positivos y negativos sobre desencadenantes DB ... ¿no responderá eso también a su pregunta?) – stakx

+3

@stakx estuvo de acuerdo. No busqué la palabra mal. –

Respuesta

9

Creo que están bien cuando se utilizan para rellenar un conjunto de tablas separadas y únicas para cosas como el registro, la agregación, etc. para la seguridad o la creación de metadatos, por ejemplo.

Cuando comienzas a alterar tus datos "en vivo" o "regresar" a tus tablas de información biz, es cuando se vuelven malvadas e inmanejables. También son completamente innecesarios para esto. No hay nada que un disparador haga que un proceso almacenado no pueda hacer.

Siento que son el equivalente maligno de SQL a los GOTO en los lenguajes de programación. Legal, pero debe evitarse a menos que sea absolutamente necesario, y NUNCA son absolutamente necesarios.

+0

Gracias Paul, ¡pero dijiste que absolutamente NUNCA son necesarios! ¿Hay alguna forma mejor de hacer el registro para actualizar, eliminar de la tabla? –

5

Porque son "mágicos". No son muy visibles y pueden hacer mucho trabajo.

He visto a los buenos desarrolladores tomar mucho tiempo tratando de rastrear los problemas relacionados con los desencadenantes porque simplemente no pensaron en buscarlos. Además, rara vez se necesitan.

+0

Pasé la mayor parte del día buscando una misteriosa declaración de actualización de un proceso almacenado que no emite una actualización. Larga historia, es el disparador sobre la mesa que emite la actualización. – CTKeane

+2

Eso no significa que el disparador sea algo malo, significa que los desarrolladores no están capacitados adecuadamente. – HLGEM

+2

@HLGEM, los desarrolladores no (¡y no pueden) saber todo! El punto es poner código en un gatillo puede ocultarlo innecesariamente. – CrazyTim

7

Los desencadenadores de base de datos son malos cuando se usan cuando otras características son más apropiadas.

Las características que deben tenerse en cuenta antes de intentar utilizar disparadores:

restricciones de comprobación

restricciones de clave externa

únicos índices/restricciones

(persistentes de) las columnas calculadas

(Indexado) Vistas (si un disparador intenta algo así como actualizar un agregado, digamos)

procedimientos almacenados (si el acceso directo a las tablas puede ser prohibida)

Después de ese punto, los disparadores pueden ser utilizados adecuadamente sin ser "malo". Los desencadenantes siempre deben diseñarse para tener una huella pequeña.

2

Aquí hay algunos artículos que deberían ayudarle a resolver por sí mismo para sus necesidades.

  1. Pros and Cons of Triggers vs. Stored Procedures for Denormalization (SO pregunta);
  2. Choice Between Stored Procedures, Functions, Views, Triggers, Inline SQL.

En resumen, Triggers son útiles para el procesamiento de una gran cantidad de datos, cuando se debe realizar un DML complejo. Para responder a su pregunta, si este no es el caso, obtuvo su respuesta cuando el activador es malo.

Cuestiones relacionadas