From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
---|---|
To: | Leonel Nunez <lnunez(at)enelserver(dot)com> |
Cc: | Miguel <mvillagomez(at)sayab(dot)com(dot)mx>, Postgres <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Foreing key |
Date: | 2006-08-15 13:51:59 |
Message-ID: | 20060815135159.GC13976@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Leonel Nunez escribió:
> Miguel wrote:
> >Ahora si tengo dudas :), bueno; mi pregunta es si se puede hacer una
> >tabla que tenga una llave foranea a varias tablas:
> >
> >Ejemplo:
> >
> >
> >
> >CREATE TABLE proyecto(id_proyecto SERIAL, edo_origen varchar NOT NULL,
> >fecha_inicio date NOT NULL, fecha_termino date NOT NULL, nombre
> >varchar NOT NULL, no_contrato varchar NOT NULL, costo_hrs float NOT
> >NULL, PRIMARY KEY(id_proyecto, nombre));
Creo que esto es incorrecto; por que hacer la llave primaria
(id_proyecto, nombre)? Mas bien la llave primaria deberia ser solamente
(id_proyecto), y al campo nombre deberias ponerle una restriccion
UNIQUE NOT NULL.
Eso no solo te permite crear la llave foranea en otras tablas, sino que
ademas tiene sentido desde un punto de vista logico. Lo otro no lo
tiene, porque las restricciones permiten tener cosas como
id nombre
1 piloto
1 laguna
1 pato
2 piloto
2 pato
3 visite
etc. Esto obviamente no es lo que quieres, porque hay id repetidos y
ademas nombres repetidos (pero la combinacion id,nombre no se repite,
que es lo que expresas poniendo la PK en esas dos columnas).
--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
From | Date | Subject | |
---|---|---|---|
Next Message | Yaremi Paz | 2006-08-15 13:55:09 | Uso de la ñ, y otros caracteres. |
Previous Message | Alvaro Herrera | 2006-08-15 13:46:24 | Re: [problemas con consulta, obtener el maximo y su rut asociado] |