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"
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 |