He leído que usar OID como clave principal en una base de datos postgreSQL / PostGIS es una práctica deficiente porque hay casos en los que se pueden restablecer. Suena lógico, pero ¿cuál es una alternativa adecuada? Creo que hay una opción para usar un UUID "Universal Unique Identifer", pero el texto grande y el valor numérico que 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 para esa tabla y única solo para esa tabla. Ahora tengo un problema porque quiero relacionar mis tablas espaciales (todas con un campo "gid" que comienza en 1 e incrementando) a 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 entre sí.
EDITADO 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 no sea un buen diseño de base de datos. Estoy interesado en lo que piensas.
¿Algun consejo?
I believe there is an option to use a "Universal Unique Identifer" UUID, but the large text and number value that spits out is horrible.
¿Por qué importa cómo se ve la identificación única?Respuestas:
Me gustaría crear tablas intermedias separadas
buildings_attach
,parcels_attach
etc. Entonces no es necesario un identificador global.fuente
Dos soluciones:
1) Cree una secuencia única y haga que todas las tablas usen esa secuencia, se puede hacer desde el principio o puede crear una columna de ID y actualizar sus tablas ahora.
Para crear la secuencia:
Luego una mesa:
Para actualizar un campo de id. De tabla existente con nuevos ID (hágalo para todas las tablas que desea seguir la misma secuencia):
2) La otra solución: crear una secuencia temporal y ejecutar la consulta creando una nueva columna de ID.
Más aquí: http://www.postgresql.org/docs/8.4/static/sql-createsequence.html
fuente
La mejor opción es el UUID o GUID. Están construidos por este motivo, globalmente únicos, sin importar qué tabla. ¿Feo? Sí, pero son los mejores para esta situación.
Ver /programming/294933/generate-unique-id-to-share-with-multiple-tables-sql-2008
He visto métodos en los que las personas usan datos de la tabla para hacer ID, por ejemplo, col1 + somestring + col2, realmente me gustaría adivinar esto (ver aquí ). Las ID inteligentes son una muy mala idea.
fuente
Hola
¿Por qué no tomas la identificación de la tabla grande y la pones en las tablas espaciales?
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 ID de la tabla grande debería ser suficiente, o me falta algo.
/ Nicklas
fuente