From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Paolo Lopez <murphyperu(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Triggers Help Again |
Date: | 2005-08-21 01:49:04 |
Message-ID: | 20050821014904.GD21765@surnet.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Sat, Aug 20, 2005 at 04:52:43PM -0500, Paolo Lopez wrote:
> Para obligaciones de pago :
>
> llaves primarias :
> idObligacion integer
>
> otras llaves:
> nombreObligacion text
> fechaVcto date
> monto Real
> tipoBanco integer
> tipoPresencial integer
> moraxDia Real
> montoMora Real
> fechaCancelacion date
> montoCancelacion Real
> cancelado integer
> anulado integer
No entiendo por que "cancelado" y "anulado" son integers -- que es lo
que guardas ahi? Si son valores booleanos, deberias usar campos de tipo
booleano.
Otro tema que ya se ha comentado antes en la lista es que es mala idea
almacenar valores de moneda en campos de punto flotante; es mejor usar
NUMERIC(x, y) con valores apropiados de x e y (generalmente y=2).
> La regla de pago se resume en :
> 1) solo cancelar si no esta anulado.
>
> a lo que la regla 1) podria extenderla a
> 1.1) solo cancelar si no esta anulado y no esta cancelado.
> 1.2) solo anular si no esta anulado.
El protocolo de pago seria una funcion en plpgsql similar a
select into rec * from obligaciones
where idObligacion=<llave>
for update of obligaciones;
if rec.cancelado = true
raise exception 'ya esta cancelado'
elsif rec.anulado = true
raise exception 'ya esta anulado'
endif
Etc. Si lo haces de esta manera no tienes problemas de concurrencia,
puesto que el lock que se toma al hacer SELECT FOR UPDATE significa que
un solo proceso va a poder estar modificando una obligacion de pago en
un momento dado; cualquier otro va a tener que esperar hasta que ese
haya comprometido su modificacion, y cuando pueda ver el nuevo registro,
ya va a estar marcado como anulado o cancelado.
Otra cosa: por favor cuando respondas mensajes de la lista, hazlo
siempre en la lista (con copia a la lista). Gracias.
--
Alvaro Herrera (<alvherre[a]alvh.no-ip.org>)
"In a specialized industrial society, it would be a disaster
to have kids running around loose." (Paul Graham)
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2005-08-21 04:41:13 | [caravena@gmail.com: Invitación a participar a concurso para el 6to. Encuentro Linux Nacional] |
Previous Message | Alvaro Herrera | 2005-08-20 22:00:12 | Re: Triggers Help |