Re: [Pgsql-ayuda] Rules para el evento delete

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Dimas Ayala <dimasayala(at)vickza(dot)com(dot)sv>
Cc: pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx
Subject: Re: [Pgsql-ayuda] Rules para el evento delete
Date: 2003-11-11 17:43:50
Message-ID: 20031111174350.GB19217@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Tue, Nov 11, 2003 at 11:10:31AM -0800, Dimas Ayala wrote:
Dimas,

> Buenas tengo una DB para el modulo de cuentas por cobrar.
> ya logre hacer el ruler que cuando se actualice el idcliente lo haga tambien
> con los documentos de este.

Los ID, si son llaves primarias, no deberían ser actualizados nunca
(sólo insert y delete). Es bastante peligroso para el modelo; agregas
fragilidad sin ganar nada a cambio.

> Pero ahora quiero impedir que se elimine e idcliente si existen mov en la
> tabla ccdocum

Con respecto a eliminar los IDs, necesitas crear llaves foráneas:

CREATE TABLE clientes_d (
idcliente char(9) PRIMARY KEY
);

CREATE TABLE ccdocum (
idcliente char(9) REFERENCES clientes_d ON DELETE RESTRICT
);

regression=> insert into clientes_d values ('abcdehj');
INSERT 68569272 1
regression=> insert into ccdocum values ('abcasd');
ERROR: inserción o actualización en la tabla "ccdocum" viola la llave foránea "$1"
DETAIL: La llave (idcliente)=(abcasd ) no está presente en la tabla "clientes_d".
regression=> insert into ccdocum values ('abcdehj');
INSERT 68569274 1
regression=> delete from clientes_d ;
ERROR: update o delete en "clientes_d" viola la llave foránea "$1" en "ccdocum"
DETAIL: La llave (idcliente)=(abcdehj ) todavía es referida desde la tabla "ccdocum".

BTW, te aconsejo que no uses char(9) para llaves primarias. Es más
lento que INTEGER.

--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"Si quieres ser creativo, aprende el arte de perder el tiempo"

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message carlos castro 2003-11-11 17:55:22 [Pgsql-ayuda] Nuevo en Postgresql
Previous Message Antonio Galicia 2003-11-11 17:30:17 [Pgsql-ayuda] CONSOL 2004 - CFP