Re: Foreing key

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

In response to

Browse pgsql-es-ayuda by date

  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]