Skip site navigation (1) Skip section navigation (2)

RE: [pgsql-es-ayuda] Optimización deNomencladores

From: Rafael Yordanis Rodríguez Montero <rafael(at)uci(dot)cu>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: [pgsql-es-ayuda] Optimización deNomencladores
Date: 2007-09-22 13:22:52
Message-ID: 251EA6C55832BE4C80F868CC951BA8CE043BA5A7@ucixw2.uci.cu (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
Muchas gracias a todos por sus respuestas, de hecho me han servido de mucho y principalmente a ver que la solución que encontré no es descabellada, la misma se basa en algo que me decía un usuario anónimo, algo parecido a un EAV (entity attribute value), como lo menciona Alvaro... Pero reconozco que tiene el inconveniente, tal como Alvaro lo dice, que pierdo los tipos de datos de cada nomenclador o Clasificador, como quieran llamarle,  pero bueno, creo que no es un gran inconveniente para mí ya que todo lo que manejo en ellos son datos de tipo varchar, aunque me interesaría mucho que lo que decía Alvaro del tipo de dato ENUM, parece interesante, pero no me puedo dar el lujo de esperar por él, pues estoy un poco retrazado en el cronograma de entrega de el proyecto.
Nuevamente muchas gracias por su colaboración.
De todo corazón desde Cuba
Rafael   
 
________________________________

From: pgsql-es-ayuda-owner(at)postgresql(dot)org on behalf of Alvaro Herrera
Sent: Fri 21/09/2007 22:01
To: Rafael Yordanis Rodríguez Montero
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] Optimización deNomencladores



Rafael Yordanis Rodríguez Montero escribió:
> OK, yo pensé que todos le llamaban nomenclador, me explico:
> Para mi un nomenclador es una tabla auxiliar, por ejemplo:
> Tengo las siguientes tablas:
> Persona                       Color
> --------                       ------  
> idPersona                    idColor             
> Nombre                      Nombre
> Edad
> idColor

> La tabla Color es el nomenclador, espero me hayan comprendido, cuál es
> el nombre correcto de esto?, les agradecería de todo corazón, pero lo
> que me hace más falta es si me pudieran dar una pista  para resolver
> mi problema, imaginen que mi tabla persona tiene asociado 70 tablas de
> este tipo, ejemplo: color de la piel, color de los ojos, tipo de boca,
> tipo de cejas, etc, se almacenan tantos datos porque es una base de
> datos policial y ellos son muy exquisitos con esto, ahora, yo imagino
> que cuando yo tenga algunas millones de personas almacenadas, una
> consulta para tomar todo lo de persona, se ponga muy pesada, lo que
> quisiera es que me den una pista de como eliminar estos nomencladores.

Ah.  Hay varias formas de modelar esto:

1. con tablas auxiliares, como lo estas haciendo actualmente.  En rigor
esto no deberia ser un gran problema, pero quizas al llegar a un join de
70 tablas podria serlo.

2. Usar el valor en la tabla principal, por ej. color de ojos y escribir
"azul" en cada registro.  La gracia con respecto a (1) es que te ahorras
un join, pero el problema es que tienes el valor repetido muchas veces,
y ademas en terminos absolutos la BD sera mas pesada porque repetir cada
string es mucho mas pesado que poner un ID numerico en cada una.

3. Usar un enum, y convertir a un valor "real" en el codigo de la
aplicacion.  Por ej. usar el tipo "char" (incluyendo comillas), que
ocupa un byte, y en ese byte codificar los valores posibles.  Esto se
usa en los catalogs del sistema, por ejemplo en pg_class.relkind que
tiene valores posibles 'r', 'i', 't', 's', etc.  Cada valor tiene un
significado que debes asociarle separadamente (en el codigo); puedes
usar un CHECK para asegurarte que no se ingresan valores no validos.

4. en Postgres 8.3 hay un nuevo tipo de datos, ENUM, que parece ser
ideal para lo que quieres.  De hecho yo diria que de todas las
soluciones que te propongo, esto es lo mas recomendable.
Lamentablemente no esta disponible aun en una version liberada, pero si
puedes darte el lujo de esperar un poco, es una alternativa a
considerar.

--
Alvaro Herrera                 http://www.amazon.com/gp/registry/CTMLCN8V17R4
"Nunca confiaré en un traidor.  Ni siquiera si el traidor lo he creado yo"
(Barón Vladimir Harkonnen)
--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net



In response to

pgsql-es-ayuda by date

Next:From: JOSE LUIS RODRIGUEZDate: 2007-09-22 20:52:20
Subject: Re: ayuda con query por favor
Previous:From: David Acevedo SalazarDate: 2007-09-22 11:48:37
Subject: Re: Identificar si hay bloqueos

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group