Re: Dudas de principiante. Relaciones entre tablas

From: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>
To: el-PRiNCiPiTo <el-PRiNCiPiTo(at)terra(dot)es>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Dudas de principiante. Relaciones entre tablas
Date: 2007-12-12 16:25:06
Message-ID: 563525.45994.qm@web63710.mail.re1.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


--- el-PRiNCiPiTo <el-PRiNCiPiTo(at)terra(dot)es> escribió:

> Hola hace unos días pregunté donde instalar
> pgsql, si en windows o
> en linux. La conclusión que saqué es que lo hiciera
> en donde me
> resultara más cómodo y conocido así que de momento
> lo he hecho en
> windows pensando también en los comentarios que me
> dijeron que una
> migración no sería demasiado complicada.
>
> Bueno, una vez instalado me he puesto a crear mi
> primera base de
> datos, ya tengo todas las tablas que quería, pero
> ahora no se como hacer
> las relaciones entre unas y otras. Estoy utilizando
> pgAdmin III para
> hacer las cosas.
>
> Tampoco estoy muy seguro de si la creación de
> claves primarias es
> como yo estoy haciendo, os pongo los que me sale en
> el panel SQL para
> una de las tablas a ver si está bien o no. Lo que yo
> hago darle a crear
> tabla, ponerle las columnas y en restricciones añado
> una clave primaria
> con el nombre de la columna que quiero usar y en la
> pestaña columna la
> selecciono. Bueno, lo que sale en el panel es esto,
> supongo que con esto
> veáis lo que hago:
>
> -- Table: "DetallePedido"
> -- DROP TABLE "DetallePedido";
> CREATE TABLE "DetallePedido"
> (
> "IdDetalle" integer NOT NULL DEFAULT
> nextval('"DetallePedido_IdDetalle_seq"'::regclass),
> "IdProducto" numeric,
> "PrecioUnidad" numeric,
> "Cantidad" numeric,
> "Descuento" numeric DEFAULT 0,
> CONSTRAINT "IdDetale" PRIMARY KEY ("IdDetalle")
> )
> WITHOUT OIDS;
> ALTER TABLE "DetallePedido" OWNER TO postgres;
> COMMENT ON TABLE "DetallePedido" IS 'Esta tabla
> almacena los detalles de
> cada producto de un pedido';
>
>
> Yo creo que si que puede ser esta la forma de
> hacerlo, pero lo que no
> se hacer es ahora relacionar, por ejemplo IdDetalle
> (serial) de da la
> tabla DetallePedido con IdDetalle (numeric) de otra
> tabla.
>
> Muchas gracias por vuestra ayuda.
>
> --
> TIP 2: puedes desuscribirte de todas las listas
> simultáneamente
> (envía "unregister TuDirecciónDeCorreo" a
> majordomo(at)postgresql(dot)org)
>

Foreing Keys es la solucion al igual que en sqlserver

Tengo dos tablas central.cliente y central.encomiendas
encomiendas debe tener en el campo id_cliente
integredad referencial con la tabla central.cliente.

Sintaxis de Ejemplos

1

ALTER TABLE "central"."encomiendas"
ADD CONSTRAINT "encomiendas_fk" FOREIGN KEY
("id_cliente")
REFERENCES "central"."clientes"("id_cliente")
MATCH FULL
ON DELETE NO ACTION
ON UPDATE NO ACTION
DEFERRABLE
INITIALLY IMMEDIATE;
No ejecuta una accion de delete o update en clientes
si este contiene encomiendas.

2 ALTER TABLE "central"."encomiendas"
ADD CONSTRAINT "encomiendas_fk" FOREIGN KEY
("id_cliente")
REFERENCES "central"."clientes"("id_cliente")
MATCH FULL
ON DELETE NO ACTION
ON UPDATE CASCADE
DEFERRABLE
INITIALLY IMMEDIATE;
Si cambio el codigo de cliente todas las referencias
de este en la tabla encomiendas asumen inmediatamante
el nuevo numero de cliente.
Pero no me permite borrar los clientes si contienen
datos referidos en encomiendas

3
ALTER TABLE "central"."encomiendas"
ADD CONSTRAINT "encomiendas_fk" FOREIGN KEY
("id_cliente")
REFERENCES "central"."clientes"("id_cliente")
MATCH FULL
ON DELETE CASCADE
ON UPDATE CASCADE
DEFERRABLE
INITIALLY IMMEDIATE;
Si cambio el codigo de cliente todas las referencias
de este en la tabla encomiendas asumen inmediatamante
el nuevo numero de cliente.
Si borro un cliente borro tambien todas las
referencias en encomiendas sin preguntar nada.

Hay otras variantes segun como establescas las
sintaxis, podes leer algo en el manual y ver, yo te
paso las que mas uso segun las reglas que tenga.

Espero te sirvan los ejemplos, no se como se hace en
PgAdmin III de forma grafica, yo uso mucho EMS en su
version LITE y esta en mi HIMO un poquito mas
amigable.

De todas maneras me estoy acostumbrando a la linea de
comandos que siempre sacas mejor provecho.

Un abrazo
Atte.
Gabriel Colina

____________________________________________________________________________________
¡Capacidad ilimitada de almacenamiento en tu correo!
No te preocupes más por el espacio de tu cuenta con Correo Yahoo!:
http://correo.espanol.yahoo.com/

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Felipe Amezquita 2007-12-12 17:12:55 Re: Preocupacion con PostgreSQL
Previous Message Yoel Mc Lennan 2007-12-12 15:26:05 Error de conección al azar en entorno asp.net y postgresql con corelab y enterprise library