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)
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 |