PostgreSQL - Foreign key

   
Vista:

Foreign key

Publicado por zendi (2 intervenciones) el 22/07/2012 00:29:51
Buenas a todos. Estoy diseñando dos tablas: una de propietarios y otra en donde guardo todas las deudas de cada propietario.
En la Tabla propietarios tengo los siguientes campos:

nroapto character(5) NOT NULL,
apellidos text NOT NULL,
nombres text NOT NULL,
alicuota numeric(5,2) NOT NULL,
cedula character(8) NOT NULL,
CONSTRAINT propietarios_pkey PRIMARY KEY (nroapto),


La Tabla deuda tengo los siguientes campos:

codigo_gasto integer NOT NULL,
monto numeric(6,2) NOT NULL,
nroapto character(5) NOT NULL,
fecha date NOT NULL,
cedula character(8) NOT NULL,
CONSTRAINT deuda_pkey PRIMARY KEY (nroapto, codigo_gasto, fecha)


Ahora bien, lo que quiero es controlar que cuando se trate de eliminar un registro de la tabla PROPIETARIOS de un error e indique que no se puede ya que logicamente tiene registros CASADOS O RELACIONADOS con la tabla DEUDA. Ahora estaba tratando de crear un FOREIGN KEY con estas tablas pero no pude, ahora si pudieran ayudarme un poco mucho les agradeceria.
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

Foreign key

Publicado por richard (3 intervenciones) el 08/08/2012 16:21:43
hola zendi
lo que puedo deducir es que estas tratando hecer un foreign key a un campo que no es primary key
de la otra tabla propietarios y asi no puedes hacer.

que debes hacer en tu tabla deudas

ccid integer not null default nextval ('seq_deudas'::regclass) -- esta es uan secuencia
codigo_gasto integer NOT NULL,
monto numeric(6,2) NOT NULL,
nroapto character(5) NOT NULL,
fecha date NOT NULL,
cedula character(8) NOT NULL,
CONSTRAINT pk_dedudas PRIMARY KEY (ccid),
CONSTRAINT fk_dedudas_1 foreign (nroapto) REFERENCES propietario (nroapto) match simple on update cascada on delete no action

no se q manejador de la bd estas usando pgAdmin III o Sql Manager lite for PostgresSql
lo dos te los recomiendo

ccid es un consecutivo yo creo en casi todas mis tablas
debes crear la seq_deudas en Sequences

espero te sirva esta respuesta


atte.


RICHARD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Foreign key

Publicado por zendi (102 intervenciones) el 12/08/2012 01:40:44
Hola richard, ya creé el foreign key en la tabla deuda1 (la anterior era deuda) y ahora si lo hace, la idea era que cuando tratara de borrar de la tabla propietarios me diera un mensaje de error diciendome que debo eliminar porq

CREATE TABLE deuda1
(
codigo_gasto integer NOT NULL,
monto numeric(6,2) NOT NULL,
nroapto character(5) NOT NULL,
fecha date NOT NULL,
cedula character(8) NOT NULL,
CONSTRAINT deuda_pkey1 PRIMARY KEY (nroapto),
CONSTRAINT fore1 FOREIGN KEY (nroapto)
REFERENCES propietarios1 (nroapto) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE RESTRICT
)
WITHOUT OIDS;
ALTER TABLE deuda1 OWNER TO postgres;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Foreign key(correccion por post incompleto)

Publicado por zendi (102 intervenciones) el 12/08/2012 01:48:31
PostgreSQL - Foreign key
Volver
Volver
<<>>
Filtrado por todos los mensajes
Imprimirfacebooktwitter
Vistas:
Mensajes realizados anteriormente (No estaban la última vez que entraste)
Foreign key
zendi (22/07/2012 00:29:51)
60 visitas
2 respuestas
Foreign key
richard (08/08/2012 16:21:43)
Foreign key
zendi (12/08/2012 01:40:44)
Asunto: Foreign key
Autor: zendi (2 intervenciones)
Fecha: 22/07/2012 00:29:51
Buenas a todos. Estoy diseñando dos tablas: una de propietarios y otra en donde guardo todas las deudas de cada propietario.
En la Tabla propietarios tengo los siguientes campos:

nroapto character(5) NOT NULL,
apellidos text NOT NULL,
nombres text NOT NULL,
alicuota numeric(5,2) NOT NULL,
cedula character(8) NOT NULL,
CONSTRAINT propietarios_pkey PRIMARY KEY (nroapto),

La Tabla deuda tengo los siguientes campos:

codigo_gasto integer NOT NULL,
monto numeric(6,2) NOT NULL,
nroapto character(5) NOT NULL,
fecha date NOT NULL,
cedula character(8) NOT NULL,
CONSTRAINT deuda_pkey PRIMARY KEY (nroapto, codigo_gasto, fecha)


Ahora bien, lo que quiero es controlar que cuando se trate de eliminar un registro de la tabla PROPIETARIOS de un error e indique que no se puede ya que logicamente tiene registros CASADOS O RELACIONADOS con la tabla DEUDA. Ahora estaba tratando de crear un FOREIGN KEY con estas tablas pero no pude, ahora si pudieran ayudarme un poco mucho les agradeceria.
Responder al autor Subir
También te puede interesar...
- Cursos de PostgreSQL
- Temas de PostgreSQL
Asunto: Foreign key
Autor: richard (1 intervención)
Fecha: 08/08/2012 16:21:43
hola zendi
lo que puedo deducir es que estas tratando hecer un foreign key a un campo que no es primary key
de la otra tabla propietarios y asi no puedes hacer.

que debes hacer en tu tabla deudas

ccid integer not null default nextval ('seq_deudas'::regclass) -- esta es uan secuencia
codigo_gasto integer NOT NULL,
monto numeric(6,2) NOT NULL,
nroapto character(5) NOT NULL,
fecha date NOT NULL,
cedula character(8) NOT NULL,
CONSTRAINT pk_dedudas PRIMARY KEY (ccid),
CONSTRAINT fk_dedudas_1 foreign (nroapto) REFERENCES propietario (nroapto) match simple on update cascada on delete no action

no se q manejador de la bd estas usando pgAdmin III o Sql Manager lite for PostgresSql
lo dos te los recomiendo

ccid es un consecutivo yo creo en casi todas mis tablas
debes crear la seq_deudas en Sequences

espero te sirva esta respuesta


atte.


RICHARD
Comentar el mensaje Subir
Asunto: Foreign key
Autor: zendi (4 intervenciones)
Fecha: 12/08/2012 01:40:44
Hola richard, ya creé el foreign key en la tabla deuda1 (la anterior era deuda) y ahora si lo hace, la idea era que cuando tratara de borrar de la tabla propietarios1 me diera un mensaje de error diciendome que no debo eliminar porque teien registros casados en deuda1. Pero no entiendo cuando me dices que debo crear un campo ccid integer not null default nextval ('seq_deudas'::regclass) -- esta es uan secuencia

CREATE TABLE deuda1
(
codigo_gasto integer NOT NULL,
monto numeric(6,2) NOT NULL,
nroapto character(5) NOT NULL,
fecha date NOT NULL,
cedula character(8) NOT NULL,
CONSTRAINT deuda_pkey1 PRIMARY KEY (nroapto),
CONSTRAINT fore1 FOREIGN KEY (nroapto)
REFERENCES propietarios1 (nroapto) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE RESTRICT
)
WITHOUT OIDS;
ALTER TABLE deuda1 OWNER TO postgres;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar