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

From: "Mauricio Zea (Gmail)" <jmzlbqcol(at)gmail(dot)com>
To: "Xavier Vidal" <xvpxvp(at)menta(dot)net>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] Diseño con herencia de tablas
Date: 2005-05-23 19:26:19
Message-ID: 001201c55fcd$5434d490$cc01a8c0@gerencia
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Las vistas nunca hacen perder la gracia de una herencia, al contrario
facilita inmensamente el trabajo cuando se trata de relaciones entre muchas
tablas.

En tu caso, si haces select a la tabla clientes, no te traerá toda la
información relacionada con cada cliente en las tablas empresas, personas y
contratos. Para esto debes hacer un Join entre las tablas.

Si al insertar un campo en la tabla contratos, se queja postgres, es
sencillamente por que primero debes tener los datos del cliente para poder
insertar un contrato. SQL Básico.

Espero haberte podido dar una idea, al menos eso fué lo que entendí en tu
email.

Mauricio Zea

----- Original Message -----
From: "Xavier Vidal" <xvpxvp(at)menta(dot)net>
To: "'Jaime Casanova'" <systemguards(at)gmail(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Monday, May 23, 2005 11:54 AM
Subject: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] Diseño con herencia de tablas

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

---------------------------(fin del mensaje)---------------------------
TIP 3: si publicas/lees desde Usenet, por favor envía "subscribe-nomail"
a majordomo(at)postgresql(dot)org para que tus mensajes puedan llegar
a los suscriptores de la lista

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Xavier Vidal 2005-05-23 19:43:23 RE: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] Diseño con herencia de tablas
Previous Message Hugo Gamarra 2005-05-23 19:05:17 Matar proceso.