Re: [Pgsql-ayuda] Herencia

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Roberto Andrade Fonseca <randrade(at)abl(dot)com(dot)mx>
Cc: pgsql-ayuda <pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx>
Subject: Re: [Pgsql-ayuda] Herencia
Date: 2004-01-09 15:44:43
Message-ID: 20040109154443.GA17308@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Thu, Jan 08, 2004 at 05:55:28PM -0600, Roberto Andrade Fonseca wrote:

> 1) Usar la herencia de Pg.
>
> create table contacto(nombre text, direccion text);
> create table abogado(casos int) inherits (contacto);

El problema con esto es que si tienes

create table ingeniero (...) inherits (contacto)

puede haber ingenieros y abogados que violen restricciones UNIQUE
aplicadas a la tabla contactos (caso tipico: id SERIAL PRIMARY KEY)
Esto sucede porque la infraestructura de indice no puede usar mas de una
tabla. (En realidad no es necesario que haya ingenieros para esto --
los abogados pueden hacerlo por si solo, si hay registros en la tabla
contacto _y_ en la tabla abogados)

Esto puede ser resuelto usando una tabla auxiliar que contenga los IDs
de todas las tablas de la jerarquia de herencia, y una restriccion
UNIQUE.

Otro problema es el de las llaves foraneas que hagan referencia a
contacto. No veran a nadie que este en abogados. Puedes usar la misma
tabla auxiliar con IDs para solucionar esto.

Quizas hay mas ...

> create table contacto(nombre text, direccion text, id int);
> create table abogado_detalle(id int references(contacto), casos int);
> create view abogado as select c.nombre, c.direccion, a.casos from
> contacto c, abogado a where c.id=a.id
>
> y alguna regla para los inserts y los updates.

No parece mala idea ...

> (¿Se nota que no me se la sintaxis para las vistas?)

No.

> Lo malo de 2) es que o pierdo el uso de la herramienta, o tengo que
> modificarla. Lo malo de 1) es que pierdo portabilidad. Estoy tentado a
> irme por 1), pero necesito saber si hay alguna otra cosa que tomar en cuenta.

No se que tan no-portable sea 1) (hay alguna otra DB que soporte
herencia?) pero si no te preocupa mucho es porque ya compraste la idea
de usar Postgres :-) Ninguna de las dos parece realmente mala, salvo
por el defecto de Postgres que menciono mas arriba.

--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
Voy a acabar con todos los humanos / con los humanos yo acabaré
voy a acabar con todos / con todos los humanos acabaré (Bender)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2004-01-09 15:52:08 [Pgsql-ayuda] Roberto Andrade: tus mails rebotan
Previous Message Abdel Trujillo 2004-01-09 15:12:01 [Pgsql-ayuda] sobre dbms para postgress en Linux