PostgreSQL - Cálculo de totales en postgreSQL

   
Vista:

Cálculo de totales en postgreSQL

Publicado por Nahuel (1 intervención) el 23/07/2014 06:30:54
Buenas noches al foro de PostgreSQL.
Primero paso a explicar lo siguiente:
Estoy estudiando Ingeniería en Sistemas, y tengo la materia Gestión de Datos y nos plantearon un proyecto final de una empresa que vende varios materiales. La operación comercial es que el cliente pide un presupuesto por los materiales. El vendedor que atiende al cliente crea el presupuesto, y cuando el cliente confirma ese presupuesto, el vendedor crea el pedido de venta.
Ahora bien, el Presupuesto está compuesto por muchas Líneas de presupuesto. Entonces, en mi diagrama de clases tengo la relación:

[Presupuesto] 1 ------------------ * [LineaDePresupuesto]. Es decir, que las líneas de presupuesto están normalizadas del presupuesto en si. Por eso la relación 1 a muchos.

En LineaDePresupuesto, tengo el atributo "precioUnitario" y "cantidad". En Presupuesto, tengo el atributo montoFinal del presupuesto y la clave primaria es el codPresupuesto.
LineaDePresupuesto tiene un atributo codPresupuesto que es una Foreing Key que referencia al codPresupuesto de Presupuesto.
Y necesito crear una función (y trigger, seguramente) que me actualice el montoFinal del Presupuesto, es decir que cuando yo realice un INSERT de una nueva LineaDePresupuesto, me calcule el total y se lo asigne al montoFinal del Presupuesto correspondiente. Y en el caso de que yo realice un DELETE de una de las LineaDePresupuesto, esa línea me la reste del montoFinal existente en el Presupuesto correspondiente y lo actualice. No se si se entiende, no encuentro alguna otra forma de explicarlo de forma mas clara.
Es decir, en un "pseudocódigo", sería (desde mi punto de vista):
- Crear función actualizarMontoFinal ()
- Declarar variable montoTotal real
- Hacer un sum(lp.cantidad * lp.precioUnitario) into montoTotal
desde presupuesto p, lineadepresupuesto lp
donde lp.codpresupuesto=p.codpresupuesto
- Después a esa variable que contiene la sumatoria de las líneas de presupuesto, se la asigno al montoFinal del Presupuesto correspondiente.
- Después crear trigger tg_actualizarMontoFinal en el caso de UPDATE o INSERT o DELETE en (acá no se bien si sobre LineadePresupuesto o en Presupuesto) que para cada fila haga EXECUTE PROCEDURE actualizarMontoFinal().

Adjunto también una imagen del Diagrama de Clases para mayor consulta.
Les agradezco de ante mano, y espero respuestas!


En el caso de que no se vea bien la imagen, denle click derecho -> Abrir imagen en pestaña nueva (si usan el Chrome) y después la pueden zoomear bien a la imagen.
Saludos y buenas noches!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder