Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

llave foranea con llave primaria compuesta???

Estas en el tema de llave foranea con llave primaria compuesta??? en el foro de PostgreSQL en Foros del Web. SALUDOS tengo un cuestionamiento que me vuela la cabeza y es que en el pgadmin no me lo permite ?? sera que no se puede?? ...
  #1 (permalink)  
Antiguo 05/09/2007, 19:46
 
Fecha de Ingreso: abril-2007
Mensajes: 110
Antigüedad: 17 años, 6 meses
Puntos: 0
llave foranea con llave primaria compuesta???

SALUDOS

tengo un cuestionamiento que me vuela la cabeza y es que en el pgadmin no me lo permite ?? sera que no se puede?? es asi:

tengo una tabla donde la llave primaria son dos campos cedula, tipo_persona

esta tabla esta referenciada en otra como llave foranea pero no permite crear la relacion en pgadmin por que aqui solo se puede relacionar con un campo de la tabla.

con el escrip tampoco se pudo??? sera que no se puede aca les dejo un pedazo del codigo del script para la creacion de las tablas si me pueden colaborar les agradeceria mucho...


CREATE TABLE tipo_persona (
id_tipo_persona INTEGER NOT NULL ,
nombre_tipo VARCHAR(20) NULL,
PRIMARY KEY(id_tipo_persona)
);

CREATE TABLE persona (
cedula VARCHAR(11) NOT NULL ,
tipo_persona INTEGER NOT NULL,
nombre VARCHAR(50) NULL,
apellidos VARCHAR(50) NULL,
telefono VARCHAR(10) NULL,
direccion VARCHAR(70) NULL,
PRIMARY KEY(cedula, tipo_persona),
CONSTRAINT tipo_persona FOREIGN KEY (tipo_persona)
REFERENCES tipo_persona (id_tipo_persona) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION

);

CREATE TABLE bodega (
id_bodega INTEGER NOT NULL ,
cliente_cedula VARCHAR(11) NOT NULL,
nombre VARCHAR(25) NULL,
ubicacion VARCHAR(60) NULL,
capacidad NUMERIC(10,2) NULL,
PRIMARY KEY(id_bodega),
CONSTRAINT cliente_cedula FOREIGN KEY (cliente_cedula)
REFERENCES persona (cedula, tipo_persona) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
""" he aqui el problema no me deja pasar de esta linea
  #2 (permalink)  
Antiguo 06/09/2007, 02:35
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 9 meses
Puntos: 13
Re: llave foranea con llave primaria compuesta???

De verdad no ves el problema....
le estas diciendo que un solo campo referencia a dos campos de otra tabla en la FK.

cedula VARCHAR(11)
tipo_persona INTEGER
lo quieres referencias solo con: cliente_cedula VARCHAR(11)

no te falta algo??

Un saludo
  #3 (permalink)  
Antiguo 06/09/2007, 06:43
 
Fecha de Ingreso: abril-2007
Mensajes: 110
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: llave foranea con llave primaria compuesta???

hola gracias por tu respuesta el problema de la solucion que publicas es que en la tabla persona una persona puede existir varias veces lo que las diferencia es el tipo_persona si es comprador, proveedor, vendedor si lo coloco nada mas como referencia la cedula me arrojaria varios resultados en lugar de uno especifico que es el que quiero. no puedo crear un codigo independiente por que eso permitiria que se ingrese personas repetidamentes solo puedo validar que una cedula este con un tipo una sola vez.

te agradezco tu respuesdta.

puuede alguien colaborarme escucho ideas jeje????

gracias
  #4 (permalink)  
Antiguo 06/09/2007, 08:37
 
Fecha de Ingreso: abril-2007
Mensajes: 110
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: llave foranea con llave primaria compuesta???

YA TE ENTENDO SEYKO PERO MIRA QUE LO COLOCO ASI Y NADA

CREATE TABLE Bodega (
ID_Bodega INTEGER NOT NULL ,
persona_tipo_persona INTEGER NOT NULL,
cliente_cedula VARCHAR(11) NOT NULL,
Nombre VARCHAR(25) NULL,
Ubicacion VARCHAR(60) NULL,
Capacidad NUMERIC(10,2) NULL,
PRIMARY KEY(ID_Bodega),
CONSTRAINT (cliente_cedula, persona_tipo_persona)
FOREIGN KEY(cliente_cedula, persona_tipo_persona)
REFERENCES persona(cedula, tipo_persona)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);

ME DICE QUE AQUI HAY UN ERROR

Y LO HAGO ASI

CREATE TABLE Bodega (
id_Bodega INTEGER NOT NULL ,
persona_tipo_persona INTEGER NOT NULL,
cliente_cedula VARCHAR(11) NOT NULL,
Nombre VARCHAR(25) NULL,
Ubicacion VARCHAR(60) NULL,
Capacidad NUMERIC(10,2) NULL,
PRIMARY KEY(id_Bodega),
CONSTRAINT cliente_cedula FOREIGN KEY (cliente_cedula)
REFERENCES persona (cedula) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT persona_tipo_persona FOREIGN KEY (persona_tipo_persona)
REFERENCES persona (tipo_persona) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION

);

Y NADA QUE PODRA SER

GRACIAS
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 14:18.