Re: Herencia?

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Victor Lopez <d01m01a2000(at)gmail(dot)com>
Cc: Arturo <arturomunive(at)gmail(dot)com>, Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>, Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Herencia?
Date: 2007-05-09 14:38:01
Message-ID: 20070509143801.GE4504@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Victor Lopez escribió:

> Albarán es (aquí) una nota de entrega previa a la formalización de una
> factura.
> (en el albarán se dice el material entregado, que material no se
> entregó y porque y otras circunstancias que harán que la factura
> tenga un contenido u otro)
>
> También se pueden agrupar varios albaranes - como los 'ticket' - bajo
> la misma factura)

Acá eso se conoce como "guía de despacho" o simplemente "guía"

> >Esto deberia funcionar, pero conviene tener en mente que algunas
> >cosillas como restricciones UNIQUE no funcionan en jerarquias de
> >herencia, y tampoco las FK.
>
> En la clase base, en las que heredan o en ambas?
>
> Y no se si es muy largo el 'porque' para explicarlo ¿?
> (no se si es muy largo ... porque no se el porqué)

Lo que sucede en la unicidad es que si tu insertas en la clase padre
directamente, estos registros no serán chequeados por unicidad contra
aquellos que hayan sido insertados en las clases hijas; ni viceversa.
Tampoco se chequean los registros de las clases "hermanas".

El motivo es que chequear esto no es nada de trivial: requiere tener un
índice que sea "global", esto es, que cubra todas las tablas. La
complicación es que hacer una inserción en un índice así es bastante más
difícil de lo que parece.

Personalmente creo que este problema tiene solución, pero aún nadie ha
intentado "de verdad" atacarlo.

En el caso de las FK el problema es otro -- se chequea solamente en la
tabla padre si existe o no el registro correspondiente a la PK.
Corregir este problema sería simplemente cosa de hacer que si la PK no
está presente en la tabla padre, se chequee su existencia en las tablas
hijas; pero la verdad es que además necesitas bloquear ese registro para
que no desaparezca antes de que termine la transacción que está
insertando el dato FK, pero por alguna razón que se me escapa en este
momento, eso no es trivial de hacer.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gabriel Hermes Colina Zambra 2007-05-09 14:44:30 Re: No conecta BD
Previous Message Gabriel Hermes Colina Zambra 2007-05-09 14:37:53 Re: ayuda..