Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > PostgreSQL

Respuesta
 
Herramientas Desplegado
Antiguo 05-sep-2007, 19:46   #1 (permalink)
wolfmao ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 77
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
wolfmao está desconectado   Responder Citando
Antiguo 06-sep-2007, 02:35   #2 (permalink)
seyko ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.134
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
seyko está desconectado   Responder Citando
Antiguo 06-sep-2007, 06:43   #3 (permalink)
wolfmao ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 77
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
wolfmao está desconectado   Responder Citando
Antiguo 06-sep-2007, 08:37   #4 (permalink)
wolfmao ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 77
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
wolfmao está desconectado   Responder Citando
Respuesta

Calificación: Calificación de Tema: 2 votos, 2,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 02:48.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93