12 votos

¿Qué es un adecuado Global/Universal Identificador Único para una base de datos PostGIS?

He leído que el uso de Oid como una clave principal en una postgreSQL/PostGIS db es una mala práctica porque hay casos en que estos se pueden restablecer. Suena lógico, pero entonces, ¿qué es una alternativa adecuada? Creo que hay una opción para utilizar un "Universal Unique Identifier" UUID, pero el texto de gran tamaño y valor del número que escupe es horrible.

Sólo un poco más de fondo a mi situación. Tengo todas mis tablas espaciales creado con un campo llamado "gid", que es la clave primaria de la tabla y la única en esa tabla. Tengo un problema ahora porque quiero relatar mi tablas espaciales (todos con un "gid" campo a partir de la 1 y de incremento) a una gran tabla con la información relacionada. Obviamente para que mi relación con el trabajo de todos mis características espaciales necesita un identificador único que los diferencia uno del otro.

EDITADO Añadido esta imagen como por Peters' comentario. Pedro esta es la idea que tengo en mi cabeza, que puede no ser la mejor manera de ir sobre ella o incluso podría no ser buena db de diseño. Estoy interesado en lo que usted piensa.

Conceptual diagram

Algún consejo?

Gracias

Ando

9voto

Pablo Puntos 6414

Dos Soluciones:

1)Crear una sola secuencia y hacer todas las tablas de uso de la secuencia, se puede hacer desde el principio o puede crear una columna de ID y actualizar sus tablas de ahora.

Para Crear la secuencia:

CREATE SEQUENCE universal_sequence;

A continuación, una tabla:

CREATE TABLE (
colname integer NOT NULL DEFAULT nextval('universal_sequence'));

Para Actualizar una tabla existente de identificación de campo con nuevos Identificadores (hacerlo para todas las tablas que desea seguir la misma secuencia):

UPDATE table1
SET id=nextval('universal_sequence'));

2)La otra solución: Crear una secuencia temporal y correr a la consulta de la creación de una nueva columna de ID.

Más aquí: http://www.postgresql.org/docs/8.4/static/sql-createsequence.html

5voto

Sparr Puntos 178

Me gustaría crear separado intermediario tablas buildings_attach, parcels_attach, etc. Entonces usted no necesita un identificador global.

4voto

Jauder Ho Puntos 3172

La mejor opción es el UUID o GUID. Están construidas por esta razón, a nivel mundial único, no importa lo que la tabla. Feo? Sí, pero ellos son los mejores para esta situación.

Ver http://stackoverflow.com/questions/294933/generate-unique-id-to-share-with-multiple-tables-sql-2008

He visto los métodos donde la gente usa los datos de la tabla para hacer IDs por ejemplo col1 + somestring + col2, quiero realmente realmente adivse en contra de este (ver aquí). Inteligente de los Identificadores son una muy mala idea.

0voto

Lars Mæhlum Puntos 4569

Hola

¿Por qué no tomar el id de la mesa grande y la puso en las tablas espaciales en su lugar?

Si una fila en una de las tablas espaciales se refiere a varias filas en la gran mesa veo el problema, de lo contrario, la gran tabla de identificación debería ser suficiente, o me estoy perdiendo algo.

/Nicklas

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X