RE: [pgsql-es-ayuda] Diseño con herencia de tablas

From: "Xavier Vidal" <xvpxvp(at)menta(dot)net>
To: "'Jaime Casanova'" <systemguards(at)gmail(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: [pgsql-es-ayuda] Diseño con herencia de tablas
Date: 2005-05-23 16:54:32
Message-ID: 20050523165428.SJPV26907.smtp06.retemail.es@pentium4
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Buenas

Me voy a explicar mejor con un ejemplo

Tengo una tabla que la llamo clientes, de la cual hago heredar dos tablas :
Personas y Empresas

Los campos quedan así :

Clientes (id, nombre, direccion, e-mail,...)
Personas (fecha_nacimiento, cargo,...)
Empresas (capital_social, sector,...)

Ahora, hay una tabla llamada Contratos que tiene una relación n a 1 respecto
a clientes.

Contratos (idcontrato, idcliente, fecha_contrato) donde idcliente es foreign
key a clientes

Este modelo de datos representa a los contratos que tienen los clientes, ya
sean estos personas o empresas, de ahí que se cree la herencia de tablas.

Clientes -1------n- Contratos
|
|
----------------
| |
Personas Empresas

Bien, ahora veamos lo que tienen las tablas:

Personas tiene los registros con id 4,6,8
Empresas tiene los registros con id 1,2,3,5,7

Ahora si creo un contrato con estos valores (3, 2,10/10/2004) , PostgreSQL
se queja ya que no encuentra a ningún registro de la tabla Clientes con el
id=2, sin embargo Empresas aunque pertenece a Clientes, si que tiene el id
2, pero no lo sabe relacionar!!!

Lo que no entiendo es que si hago Select * from clientes, aparecen todos los
registros de clientes + personas + empresas

(para que solo salgan los de clientes haria Select * from only clientes).

Se me había ocurrido hacer una vista , pero entonces, se pierde la gracia de
la herencia, no?

Gracias.

-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org
[mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Jaime Casanova
Enviado el: lunes, 23 de mayo de 2005 18:22
Para: Xavier Vidal
CC: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Diseño con herencia de tablas

On 5/23/05, Xavier Vidal <xvpxvp(at)menta(dot)net> wrote:
>
> Saludos.
>
> Me he encontrado con este problema, a ver si alguien me echa una mano
> o me da alguna idea:
>
> Estoy diseñando una estructura de tablas donde la tabla B y C heredan
> de una tabla A. En las tres tablas tengo registros.
>
> A -------- X
> |
> ------
> | |
> B C
>
> A(id, nombre)
> B(cargo)
> C(departamento)
>
> X(idX, idA, precio)
>
> [idA es Foreign Key a "id" de A)
>
> Externamente a dicha estructura, tengo una tabla X de la cual tengo
> una Foreign Key a la tabla A.
>
> Conceptualmente, los registros de B y C son también de tipo A, pero lo
> que pasa realmente es que cuando quiero que un registro de X apunte a
> un registro que pertenece a la estructura (en B o C pero no en A),
> como no está en A me aparece la violación de la integridad referencial.
>
> No se si me he explicado suficientemente bien, pero bueno. Aquí lo dejo.
> Gracias.
>
Solucion rapida, elimina el FK.

Ahora, no entiendo ese tipo de herencia en que pueden haber registros en B y
C que no esten en A. Puede ocurrir, AFAIK, que en A haya cosas que no esten
ni en B ni en C pero no a la inversa. me equivoco?

--
Atentamente,
Jaime Casanova
(DBA: DataBase Aniquilator ;)

---------------------------(fin del mensaje)---------------------------
TIP 1: para suscribirte y desuscribirte, escribe a majordomo(at)postgresql(dot)org

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mauricio Zea (Gmail) 2005-05-23 16:55:00 Re: [pgsql-es-ayuda] Diseño con herencia de tablas
Previous Message Jaime Casanova 2005-05-23 16:22:18 Re: Diseño con herencia de tablas