Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Fw:[pgsql-es-ayuda]Consulta sobre cómo armar estructura detablas

From: "Javier Aquino H(dot)" <JAquino(at)LexusEditores(dot)com>
To: Damián Culotta <dculotta(at)fibertel(dot)com(dot)ar>, "Ayuda PostgreSql" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Fw:[pgsql-es-ayuda]Consulta sobre cómo armar estructura detablas
Date: 2006-02-08 04:12:15
Message-ID: 010501c62c65$d8974870$0a010a0a@javier
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Holas,

Interesante el tema .... aquí te dejo mi opinión.

Yo tengo desarrollado un sistema que involucra ubicaciones geográficas y
está soportado para diversos países bajo 2 tablas (ubicacion y
ubicacion_tipo ) y usando una función recursiva en el lado del servidor y
enlazados a una vista, lo cual me deja una pseudo tabla con los datos ya
trabajados y listo para solo consultarse.

Yo uso una estructura como la que mencionaste:

Tabla ubicacion:
id, padre, tipo, descripcion

id: es el código de la ubicación geográfica a la que hago referencia. Ojo ..
en este caso es char(10).
padre: es el id del cual depende esta ubicación
tipo: es el código de tipo de ubicación para relacionarlo con
ubicacion_tipo.
descripcion: Adivinen que va aqui

En la tabla de ubicación_tipo van los nombres de los tipos de lugares
dependiendo donde instale el programa. ( Departamento, Provincia, Distrito
en el casode Perú o Región, Ciudad, Comuna para el caso de Chile ... y
asi ).

y finalmente una función recursiva ... a ojo ... si hay funciones recursivas
en PostgreSQL, aquí te mando un ejemplo del famoso factorial de un numero.

Es mi pequeño grano de arena .. espero haya sido de utilidad.

Saludos y suerte en tu proyecto,

Javier.

********************** INICIO DE FUNCION ***************

CREATE OR REPLACE FUNCTION factorial (integer) RETURNS numeric AS'
DECLARE
an_numero ALIAS FOR $1 ;
BEGIN
IF an_numero = 1 OR an_numero = 0 THEN
Return an_numero ;
END IF ;

Return an_numero * factorial( an_numero - 1 ) ;

END;
'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

********************** FIN DE FUNCION ***************

----- Original Message -----
From: "Damián Culotta" <dculotta(at)fibertel(dot)com(dot)ar>
To: "Sebastián Villalba" <sebastian(at)fcm(dot)unc(dot)edu(dot)ar>; "Ayuda PostgreSql"
<pgsql-es-ayuda(at)postgresql(dot)org>; <orc(at)bvconline(dot)com(dot)ar>
Sent: Tuesday, February 07, 2006 9:57 PM
Subject: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Fw:[pgsql-es-ayuda]Consulta
sobre cómo armar estructura detablas

> Oscar:
>
> Voy a revisar lo que me dijiste.
> Sólo te hago una aclaración, en la mayoría de las provincias, los
> deparatamentos están jerárquicamente por debajo de las provincias y por
> encima de los municipios. De hecho, varios tienen capital de departamento
> (lo cual no es lo mismo que cabecera de partido).
> Igualmente, gracias por el dato, voy a chusmearlo.
> En cuanto a la cantidad, espero que sean tan solo 23.000. Yo recién cargué
> las provincias y los departamentos de algunas provincias y ya voy 1.000
> registros. (Esto sin cargar municipios ni localidades).
>
> Sebastián:
>
> Con nodos trato de explicar lo de las relaciones. Nodo 4 depende del 3, el
> 3 del 2 y así sucesivamente.
>
> Amplío sobre los casos.
> En el caso 3 no hay departamentos, ya que, por ejemplo, la provincia de
> Buenos Aires no se divide en departamentos, sino directamente en
> municipios.
> En el caso 4 hace referencia a la Ciudad Autónoma de Buenos Aires. Esta
> debiera cargarse como localidad, que es lo que es, pero tiene jerarquía de
> provincia.
>
> Sobre lo que me decís de la primer aopción de creación de tablas (me
> refiero a la de armar una para provincias, departamentos, municipios,
> etc), el problema que encuentro es el siguiente:
> Si suponeos que la jerarquía se da siempre en:
> 1. Provincia
> 2. Departamento
> 3. Municipio
> 4. Localidad
>
> Y que, por ejemplo, en departamento el nodo supeior debe ser un id de
> provincia, en municipio de departamento y en localidad de municipio; tengo
> el problema que en los casos en que no hay departamentos (caso prov. de
> Buenos Aires), no peudo relacionar las localidades con ningun
> departamento, por lo caul falla (salvo que no usara las claves foráneas).
>
> Sobre lo de tener distintos datos en una tabla, no se si los consideraría
> distintos datos, ya que, en siu son nombres de lugares.
> Te cuento que armé ahora. La tabla tiene:
>
> id, nodo supeior (es el id), tipo (si es provincia, departamto, etc),
> descripcion (que sería el nombre de cada uno. ej: Buenos Aires, Catamarca,
> La Plata, etc)
>
> De esta manera, logro armar (en una tabla en este caso) la carga de todos
> los datos y mantener la inetgridad de las relaciones.
> Claro, esto me genera tener que divertirme con recursivdad (cosa que ya
> logré resolver para las lecturas de esto probando con Php para empezar).
>
> Espero haber explicado mejor dónde creo que falla el modelo de las
> distintas tablas para cada tipo.
> Si lo que digo sobre esta falla es correcto (cosa que al probarlo me
> pareció que si), ¿queda algún otro modelo aparte del recursivo?.
>
> Pregunta bonus: ¿con pl/sql se pueden armar funciones recursivas?
>
> Muchas gracias
>
>
>
> ----- Original Message -----
> From: "Sebastián Villalba" <sebastian(at)fcm(dot)unc(dot)edu(dot)ar>
> To: "Damián Culotta " <dculotta(at)fibertel(dot)com(dot)ar>; "Ayuda PostgreSql"
> <pgsql-es-ayuda(at)postgresql(dot)org>
> Sent: Tuesday, February 07, 2006 11:17 PM
> Subject: Re: [pgsql-es-ayuda] Fw:[pgsql-es-ayuda]Consulta sobre cómo armar
> estructura detablas
>
>
>> Hola Damián...
>>
>> On Tue, 7 Feb 2006 22:14:02 -0300, Damián Culotta wrote
>> [...]
>>> Caso 1
>>>
>>> Nodo 1: provincia
>>> Nodo 2: departamento
>>> Nodo 3: municipio
>>> Nodo 4: localidad
>>>
>>> Caso 2
>>>
>>> Nodo 1: provincia
>>> Nodo 2: departamento
>>> Nodo 3: localidad
>>>
>>> Caso 3
>>>
>>> Nodo 1: provincia
>>> Nodo 2: municipio
>>> Nodo 3: localidad
>>
>> Por qué aquí no figuran "Departamentos"?. Toda provincia está compuesta
>> por
>> departamentos (o me equivoco? :).
>>
>>> Caso 4 (es el del distrito federal, que tiene la jerarquía de una
>>> provincia)
>>>
>>> Nodo 1: localidad
>>
>> Esto último no lo entiendo.
>>
>>> Ahora bien, se me había ocurrido armar una tabla que contenga las
>>> provincias, una con los departamentos, otra con los municipios y la
>>> última con las localidades. El problema sería que si pongo
>>> restricciones de claves foráneas entre un nivel y el otro, no voy a
>>> poder armar las relaciones según los distintos casos.
>>
>> No estoy seguro a qué le llamas "Nodos". No obstante, yo creo que la
>> mejor
>> opción es tener en diferentes tablas y llaves foráneas. No sé a qué te
>> referís
>> con que no vas "a poder armar las relaciones según los distintos casos".
>> Si
>> vos tenés una jerarquía de datos, cada tabla vá a tener llaves foráneas
>> hacia
>> la provincia (o lo que corresponda) que la contenga.
>>
>>> También pensé en una única tabla que maneje todo, es decir, que
>>> contenga los campos (por ejemplo):
>>>
>>> id, nodosuperior, nombre;
>>>
>>> De esta manera, en una unica tabla puedo cargar todos, y según el
>>> nodosuperior (que sería un id que viene de otra tabla que contiene,
>>> justamente, los distintos nodos, armaría las relaciones). En este
>>> caso, no llego a cerrar la idea para poder hacer las lecturas
>>> correctas ya que, si mal no entiendo, entro en un caso de
>>> recursividad y hasta el momento no llegué a resolver eso.
>>
>> Glup!. Te pido disculpas, pero me volví a perder ;). No obstante, tener
>> distintos "datos" en una misma tabla no me parece buena idea. Si a eso le
>> sumamos la complicación extra que encontraste con respecto a la
>> recursividad
>> (que es lo que no entiendo bien, pero seguramente vos si), creo que puede
>> ser
>> suficiente motivo, en principio, para analizar una opción diferente. Yo
>> me
>> quedaría con la primera que propusiste. Un gran saludo a todos...
>> -
>> -------------------------------------------
>> Sebastián Villalba
>> sebastian(at)fcm(dot)unc(dot)edu(dot)ar
>> -------------------------------------------
>>
>> ---------------------------(fin del mensaje)---------------------------
>> TIP 4: No hagas 'kill -9' a postmaster
>>
>>
>
>
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 8: explain analyze es tu amigo
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2006-02-08 04:40:03 Re: Ayuda sobre left outer join
Previous Message Jaime Casanova 2006-02-08 04:11:47 Re: Ayuda urgente con transacciones