[pgsql-ayuda] Relacionar tablas

JARRIN FLORES JORGE ALEXIS JJARRIN@puceuio.puce.edu.ec
Mon, 26 Mar 2001 17:27:56 -0500


Gracias la respuesta.

Oriento mejor mi inquietud:

Lo de la herencia de tablas es una característica que no la he conocido
antes al menos en SQL Server y Sybase con las que he trabajado (más en MS
SQL Server), la encuentro muy buena y tuve la ocurrencia de resolver un
problema de normalización, que tengo en una base de datos aquí describo la
situación:

Situación actual:

	estudiante
	 *id_ciudadano
	 nombre
	 dirección
	 telefono
	 dato_estudiante1
	
	empleado
	 *id_ciudadano
	 nombre
	 dirección
	 telefono
	 dato_empleado1
 
	proveedor
	 *id_proveedor
	 nombre
	 dirección
	 telefono
	 dato_proveedor1

Una solución es tipificar en una sola tabla con un atributo que describa el
tipo de entrada, p ej. e = estudiante; f = empleado; p = proveedor., pero
existe el inconveniente de que si el empleado es también estudiante (cosa no
muy rara en mi caso), no podría incluirlo en la tabla a menos que cambie el
id, cosa que no puedo por cuanto no es un número aleatorio ni arbitrario,
esto se resolvería con incluir en la llave primaria el atributo de
tipificación pero no evito el problema de la duplicación de datos.
Una solución más sólida (para mí) es la siguiente:

	persona------------<estudiante
		|----------- empleado
		|----------- proveedor

La relación a varios en estudiante es porque este puede pertenecer a varias
carreras, miren que ninguna es mandatoria.  Así el modelo funciona, pero
tengo la curiosidad de probar la herencia de PostgreSQL en el mismo esquema
y si los conceptos de tipificación se pueden adaptar transparentemente a la
herencia.  

Si la tabla persona contiente más de 10.000 registros, la estudiante más de
5000, la de empleado 2000 y la de proveedores unos 500 y tengo tres sistemas
trabajando sobre las mismas tablas, claro mirándolas de diferente manera,
¿el rendimiento de PostgreSQL será mejor usando "INHERITS" que la típica
forma de "Foreing Keys"?, ¿y si cambio la implementación de Foreing Keys por
la de INHERITS, cuales serían los riesgos, ventajas o desventajas?.  Por
otro lado está el asunto de los bloqueos, de los cuales me he desentendido
hasta resolver mi curiosidad.

Claro que tendré que preparar cuidadosamente el escenario de las pruebas (el
modelo es mucho más complejo que el que les muestro), en cuanto lo haga les
avisaré, a menos que alguien me diga que ha hecho algo parecido y me cuente
sobre el resultado.

Bueno, espero no haber molestado mucho.

Atte,
Jorge	

> -----Mensaje original-----
> De:	Luis Rodrigo Gallardo Cruz <Rodrigo Gallardo
> [SMTP:lrgallardo@abl.com.mx]
> Enviado el:	lunes 26 de marzo de 2001 13:17
> Para:	pgsql-ayuda@tlali.iztacala.unam.mx
> Asunto:	RE: [pgsql-ayuda] Relacionar tablas
> 
> JARRIN FLORES JORGE ALEXIS writes:
>  > Yo usaria vistas, no he probado la herencia más que en unos ejemplos
>  > pequeños, parece ser buena idea pero ¿no dependería más del modelo de
>  > datos?. 
> 
> Esta es la manera más adecuada, aunque, si no es una consulta que
> hagas todo el tiempo, tal vez no esea necesario crear una vista, y
> puede simplemente enviar la petición completa.
> 
>  > Por otro lado, ¿es posible hacer herencias sobre tablas creadas sin
> volver a
>  > crear el modelo?
> 
> Sí, sí puedes, pero es mejor no hacerlo, por la misma razón por la que
> no debería añadir o quitar tablas 'normales': Estas modificando la
> estructura de la base, y eso deberiá ser un cambio bien analizado.
> 
>  > A propósito de modelos, yo he modelado algún tiempo bases de datos
>  > relacionales, y quisiera saber si existe alguna notación especial para
> las
>  > objeto-relacionales. 
> 
> ¿Que quieres decir? El modelo 'objeto-relacional' no es algo
> estandarizado aún. De hecho, ni siquiera existe como un verdadero
> modelo. Hasta ahora, es simplemente la manera en la que los que hacen
> bases de datos está intentando no quedarse sin entrar a la moda de los
> objetos, y la mayoría no están pensando muy bien lo que hacen. Y como
> son soluciones ad hoc, pues no hay una manera estandar de llamrles.
> 
>  > En los modelos relacionales yo veo el asunto de la herencia como
> subtipos,
>  > pero no sé si formalmente eso es correcto.
> Según un texto que estuve leyendo, (Envio la referencia el miercoles,
> si a alguien le interesa) la manera correcta de implementar una
> orientación a objetos en una base de datos *no* es con el INHERITS de
> PostgreSQL, puesto que eso confunde el concepto de dominio con el de
> relación. Según este texto, lo único que se necesita para implementar
> objetos en una base de datos relacional, es apmliar el sistema de
> tipos, de modo que el usuario pueda definir sus propios tipos de
> datos, e implementar el concepto de herencia *entre tipos*. PostgreSQL
> tiene la capacidad de hacer por lo menos lo primero, pero en su
> documentación solo lo mencionan de pasada, y cacarean mucho sobre el
> INHERITS, que no sirve para esto.
> 
> -- 
> Rodrigo
> 
> 
> --------- Pie de mensaje -------------------------------------------
> Archivo historico: http://tlali.iztacala.unam.mx/maillist/pgsql-ayuda
> Cancelar inscripcion:
> mail to: majordomo@tlali.iztacala.unam.mx
> text   : unsubscribe pgsql-ayuda
--------- Pie de mensaje -------------------------------------------
Archivo historico: http://tlali.iztacala.unam.mx/maillist/pgsql-ayuda
Cancelar inscripcion:
mail to: majordomo@tlali.iztacala.unam.mx
text   : unsubscribe pgsql-ayuda