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

13

He leído que el uso de OID como clave principal en un ds postgreSQL / PostGIS es una mala práctica porque hay casos en los que se pueden restablecer. Suena lógico, pero entonces ¿cuál es una alternativa adecuada? Creo que hay una opción para usar un UUID "Universal Unique Identifer", pero el gran valor de texto y número que se escupe es horrible.

Solo un poco más de antecedentes de mi situación. Tengo todas mis tablas espaciales creadas con un campo llamado "gid", que es la clave principal de esa tabla y solo para esa tabla. Tengo un problema ahora porque quiero relacionar mis tablas espaciales (todas con un campo "gid" que comienza en 1 e incrementa) con una tabla grande con la información relacionada. Obviamente, para que mi relación funcione, todas mis características espaciales necesitan un identificador único que las diferencie unas de otras.

EDITADO Se agregó esta imagen según el comentario de Peters. Peter, esta es la idea que tengo en mi cabeza, puede que no sea la mejor manera de hacerlo o incluso que no sea un buen diseño de DB. Me interesa lo que piensas.

¿Algún consejo?

    
pregunta Ando 23.02.2011 - 02:49

4 respuestas

5

Yo crearía tablas intermedias separadas buildings_attach , parcels_attach , etc. Entonces no necesitas un identificador global.

    
respondido por el Peter Eisentraut 23.02.2011 - 23:36
8

Dos soluciones:

1) Cree una sola secuencia y haga que todas las tablas usen esa secuencia, puede hacerlo desde el principio o puede crear una columna de ID y actualizar sus tablas ahora.

Para crear la secuencia:

CREATE SEQUENCE universal_sequence;

Luego una tabla:

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

Para actualizar un campo de ID de tabla existente con nuevas ID (hágalo para todas las tablas que desee seguir en la misma secuencia):

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

2) La otra solución: crear una secuencia temporal y ejecutar la consulta creando una nueva columna de ID.

Más aquí: enlace

    
respondido por el Pablo 23.02.2011 - 17:16
4

La mejor opción es el UUID o GUID. Se construyen por esta razón, globalmente única sin importar qué tabla. ¿Feo? Sí, pero son los mejores para esta situación.

Ver enlace

He visto métodos en los que la gente usa datos de la tabla para crear ID, por ejemplo, col1 + somestring + col2, realmente me gustaría analizar esto (consulte here ). Las identificaciones inteligentes son una muy mala idea.

    
respondido por el Nathan W 23.02.2011 - 04:23
0

Hallo

¿Por qué no tomas el ID de la tabla grande y pones en las tablas espaciales en su lugar?

Si una fila en una de las tablas espaciales se relaciona con varias filas en la tabla grande, veo el problema, de lo contrario, la identificación de la tabla grande debería ser suficiente, o me falta algo.

/ Nicklas

    
respondido por el Nicklas Avén 23.02.2011 - 15:21

Lea otras preguntas en las etiquetas