[Pgsql-ayuda] tablas relacionadas de uno a uno...

Alvaro Herrera alvherre@dcc.uchile.cl
Wed, 28 Jan 2004 18:28:24 -0300


On Wed, Jan 28, 2004 at 05:23:08PM +0100, mack paul wrote:
[...]

> y si hubiera alguna adición de un registro para
> convenio o campaña, en ese
> caso tendria que  crear una funcion plpgsql que me
> haga esa adicion de forma
> comoda..eso veo por el momento..

El modelo parece razonable, pero no entiendo este comentario.  Si el
cliente no existe, no puedes agregar registro a convenio o campaña;
una llave foranea comun y corriente te ayuda a forzar esta restriccion.
Cuando quieras agregar un cliente, primero lo agregas como cliente y
despues agregas el registro en las otras tablas (todo dentro de una
transaccion, para que se agregue correctamente)

Si necesitas reforzar el hecho de que cada cliente puede ser solo de uno
de los dos tipos, puedes agregar un campo que indique de que tipo es en
la tabla cliente, y luego exigir que haya un registro en la tabla
correspondiente y que no haya en la otra. (Una alternativa seria tener
una cuarta tabla para hacer la relacion)

Si necesitas forzar que un cliente sea uno de los dos (pero no ninguno),
una alternativa podria ser crear una llave foranea circular en la tabla
de relacion ... nunca lo he intentado pero es una idea ...

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"La espina, desde que nace, ya pincha" (Proverbio africano)