Duda sobre triggers

27/06/2007 - 08:24 por Juan Diego Bueno | Informe spam
Buenas:

Quería preguntaros como resolveis una situación concreta.
Tengo una tabla de proyectos cuya clave es un código. En ella tenemos un
campo TOTAL que recoge la suma de los importes de unas facturas que están en
otra tabla.Yo lo estoy resolviendo usando triggers tanto para eliminación
como para inserción y actualización, pero dichos desencadenadores acaban
usando cursores que recorren las tablas deleted o inserted. Dado que por
cuestiones de rendimiento no se aconseja el uso de cursores, ¿cómo podría
resolver esta situación de otra forma?

Se me ocurre que podría no usar ese campo y obtener el TOTAL en base a una
consulta, pero tal cual lo tengo ahora, me obligaría a cambiar bastantes
partes de mi aplicación, con lo cual quiero evitarlo.

Uso SQL Server 2005 Express

Gracias

Preguntas similare

Leer las respuestas

#21 principiante
28/06/2007 - 22:45 | Informe spam
Bueno, aclarado.

Saludos.

Jose TH


"Maxi" escribió en el mensaje
news:%
Claro, es una opcion a a analizar lo que quiero decir que no siempre las
cosas son blancas o negras, los triggers no son malos y las vistas
tampoco, hay que analizar cada caso. Yo uso mas las vistas que los
triggers, pero tambien en algunos casos uso los triggers


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"principiante" escribió en el mensaje
news:O%
No es por nada pero usted en sus mensajes cuando le dicen triggers dice
vista indexada y cuando le dicen vista indexada dice triggers... Quien le
entiende, amigo ? :(
Segun lo que el ha explicado se adapta mejor a una vista indexada aunque
tambien se pueda por triggers.


Jose TH



"Maxi" escribió en el mensaje
news:
Hola, bueno no siempre es la mejor solucion, la de triggers no es mala
ni mucho menos :)


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"principiante" escribió en el mensaje
news:
Lo mejor es una vista indexada para esas cosas.
Para eso las inventaron.


Jose TH


"Juan Diego Bueno" wrote in message
news:
Buenas:

Quería preguntaros como resolveis una situación concreta.
Tengo una tabla de proyectos cuya clave es un código. En ella tenemos
un campo TOTAL que recoge la suma de los importes de unas facturas que
están en otra tabla.Yo lo estoy resolviendo usando triggers tanto para
eliminación como para inserción y actualización, pero dichos
desencadenadores acaban usando cursores que recorren las tablas
deleted o inserted. Dado que por cuestiones de rendimiento no se
aconseja el uso de cursores, ¿cómo podría resolver esta situación de
otra forma?

Se me ocurre que podría no usar ese campo y obtener el TOTAL en base a
una consulta, pero tal cual lo tengo ahora, me obligaría a cambiar
bastantes partes de mi aplicación, con lo cual quiero evitarlo.

Uso SQL Server 2005 Express

Gracias



















Respuesta Responder a este mensaje
#22 principiante
28/06/2007 - 22:50 | Informe spam

Debido a las limitaciones de las vistas indexadas a veces el problema no
se puede resolver con una vista indexada. Sin embargo a veces el problema
se puede resolver con una vista indexada más una vista sin indexar y a
veces me he encontrado casos que los he resuelto creando una vista
indexada más un trigger.




Por supuesto que si se pueden combinar distintas tecnicas.


Las opciones son variadas y encontrar la mejor es la tarea de un buen
desarrollador de base de datos.

En el caso concreto de Juan Diego, la mejor opción parece ser el trigger,
sobre todo por el coste de desarrollo que conlleva usar una vista.




Pienso que ese coste de desarrollo se diluye a futuro. Ya que el esta en la
etapa de desarrollo le convendria implementarlo ahora.
Se le facilitaría el mantenimiento futuro.


También existe otra opción que es la de cambiar el campo Total por un
campo calculado. La expresión podría hacer referencia una función que
devolviera el total para un determinado proyecto. Para acelerar el
cálculo, podría haber una vista indexada. Esto tiene la ventaja de que ya
no se puede modificar el campo Total al ser calculado. Pero tiene el
inconviente de que ralentiza las consultas sobre la tabla Proyecto y por
tanto probablemente no merezca la pena.



Exactamente. Sería un doble carga.


Saludos

Jose TH
Respuesta Responder a este mensaje
#23 Alfredo Novoa
29/06/2007 - 12:07 | Informe spam
On Thu, 28 Jun 2007 16:50:19 -0400, "principiante"
wrote:

En el caso concreto de Juan Diego, la mejor opción parece ser el trigger,
sobre todo por el coste de desarrollo que conlleva usar una vista.




Pienso que ese coste de desarrollo se diluye a futuro. Ya que el esta en la
etapa de desarrollo le convendria implementarlo ahora.
Se le facilitaría el mantenimiento futuro.



Estoy completamente de acuerdo, además no creo que usar una vista
implique mucho mayor coste de desarrollo.


Saludos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida