¿Por qué la mayoría de los paquetes SIG necesitan una identificación numérica?

11

Esta es una pregunta simple pero posiblemente controvertida: ¿por qué la mayoría (si no todos) los paquetes de SIG requieren que una capa determinada tenga un identificador numérico único no anulable ?

¿Por qué existe la necesidad de una clave sustituta en lugar de una clave natural?

Ejemplos:

  • ArcGIS aplica OBJECTID (o un GlobalID)

  • QGIS no carga capas cuando no tienen una identificación numérica.

George Silva
fuente
8
Una posible explicación: una identificación numérica ocupa muchos menos bytes que una identificación no numérica. Esto es aún más importante cuando comienzas a vincular diferentes tablas, que almacenan una copia de la identificación.
johanvdw
+1 Buena pregunta, no creo que NoSQL requiera claves numéricas.
Kirk Kuykendall
tinyurl.com/6xrtk2l
CaptDragon
@cap Eso es un poco sarcástico (y ya has publicado ese enlace).
whuber

Respuestas:

6

Porque necesitan tener un campo indexable optimizado. Para indexar un campo de cadena una y otra vez requeriría más sobrecarga y al final no es tan eficiente.

En realidad, ESRI admite en el mundo SDE el 'GLOBALID' que es un campo GUID, por lo que este es un campo 32char pero aún está indexado para aumentar el rendimiento.

DEWright
fuente
3
Esa es una buena explicación para la ventaja de eficiencia de una identificación numérica. Pero creo que @George está investigando más profundamente que esto. Técnicamente, los RDBMS no necesitan que sus identificadores sean numéricos, entonces, ¿por qué deberían los SIG?
whuber
1
El problema aquí no es el rendimiento. Una clave única no anulable lo haría. ¿Pero por qué debe ser numérico? Una vez que escuché o leí que debe ser numérico porque usa esa tecla para controlar el renderizado ... ¿estaba en Modelando nuestro mundo desde ESRI?
George Silva
2
Porque un SIG no es un RDBMS, aunque puede hacer uso de uno. Un SIG generalmente tendrá algunas reglas y suposiciones, como la suposición de que la clave principal será un entero indexado o GUID, en aras del rendimiento y la cordura de codificación.
blah238
1
ok, pero ¿por qué asumir un numérico? ¿Por qué no podemos elegir nuestra clave al crear una capa?
George Silva
1
Me imagino que la razón principal es que esas suposiciones hacen que el trabajo de escribir el código que hace que un paquete SIG funcione sea mucho, mucho más fácil.
blah238
4

Si comienza a agregar registros a una capa, puede confiar en que un usuario ingrese un código alfanumérico único para cada nueva característica justo antes de escribirla en el disco.

..o podría implementar un campo entero simple de autoincremento.

geographika
fuente
4

Como muchas personas han sugerido, es una cuestión de conveniencia; pero quizás más profundamente, es una convención.

Como programador, mi primer instinto sería usar una clave numérica para una ID de capa porque esa es la forma en que siempre se ha hecho. De hecho, puede que ni siquiera se me ocurra, al menos en un nivel consciente, que debería hacerlo de otra manera. Por supuesto, si hay una razón técnica para no usar números enteros, diga si existe la posibilidad de que haya más capas de las que se pueden almacenar en 32 bits (¡una propuesta muy poco probable!), O si hay una razón comercial para ello, entonces se considerarían alternativas.

También hay consideraciones algorítmicas con las teclas numéricas. La clasificación y la búsqueda de una lista de valores ordenados se reduce en última instancia a una comparación entre dos números, incluso si se trata de una lista de cadenas u objetos complejos; simplemente se convierten en números con una función hash . Dicho esto, en las computadoras modernas, buscar una lista de, digamos, 100 o incluso 1000 elementos suele ser tan rápido con un enfoque de fuerza bruta como con un algoritmo altamente optimizado. En el caso de las capas en un SIG, no puedo ver ni siquiera el más complejo de los mapas que tienen más de 1000, e incluso si lo hiciera, los otros cálculos asociados tomarían órdenes de magnitud más que cualquier ganancia pequeña de un optimizado búsqueda de una lista corta

Las teclas enteras "simplemente tienen sentido" para un programador, y como dice Brad, hay más esfuerzo en el uso de teclas no numéricas. Tal vez no más código, sino más esfuerzo mental, y somos criaturas vagas de hábito. Además, la clave que identifica de forma única algo como una capa en un SIG se considera "oculta" para el usuario, para asegurarse de que no se meta con ella y rompa el código que se basa en su unicidad (a pesar de las palabras clave DB UNIQUE). Porque si le das suficiente cuerda a un usuario, tarde o temprano alguien se ahorcará con ella. Por supuesto, imponga la unicidad en un campo editable por el usuario, pero el sistema subyacente debe asumir que su clave es única y sin restricciones.

MerseyViking
fuente
El OpenStreetMap es un ejemplo de un proyecto que necesita más de enteros de 32 bits. Utilizan bigintpara sus claves principales.
Mike T
Para formas / nodos, sí. Pero la pregunta original era sobre las capas en un SIG.
MerseyViking
OpenStreetMap almacena capas SIG.
George Silva
OSM solo almacena formas y nodos que tienen etiquetas de clave / valor. Depende del sistema de presentación (por ejemplo, OpenLayers) y del backend de representación (por ejemplo, Mapnik, Osmarender) determinar su noción de capas en función de esas etiquetas u otra cosa. Pero Mike tiene razón, usa bigints para todas las claves principales de sus tablas.
MerseyViking
+1 por mencionar que se trata de convenciones. Es una convención porque equivale a un mejor rendimiento.
CaptDragon
3

Esta pregunta ha sido confusa para las personas (como yo) que desarrollan el lado de la geodatabase de las cosas.

No es una limitación del almacenamiento de la base de datos, ya que PostgreSQL puede definir tablas con CLAVES PRIMARIAS compuestas de diferentes tipos de datos, sin embargo, estas tablas no se pueden cargar en programas como QGIS. En una nota histórica relacionada, PostgreSQL solía requerir una columna OID como clave interna, que también era un entero de 32 bits. Esto fue requerido hasta la versión 7.2 .

El requisito de ID de entero de 32 bits es realmente una limitación de programación. Es mucho más simple tener un índice para un conjunto de registros como un tipo de datos fijo (entero de 32 bits), y es conveniente que esto también sea la CLAVE PRIMARIA para ese registro. Es más desafiante hacer que un programa permita una clave primaria compuesta y que recupere un registro único basado en múltiples y / o diferentes tipos de datos. Sin embargo, al igual que el OID de PostgreSQL, esta limitación se puede superar con el tiempo de desarrollo. Para QGIS, el error de [ahora] 5 años podría resolverse algún día (aquí hay una discusión reciente sobre el tema).

Mike T
fuente
+1 Bien dicho. Como evidencia adicional de que esta es una limitación de programación, tenga en cuenta que ESRI no requirió (ni usó) ningún campo identificador interno en ArcView antes de que ArcGIS 8.x apareciera. El antiguo ArcView era capaz de todas las operaciones de la base de datos que realiza ArcGIS (y en realidad era más rápido en muchas de ellas).
whuber
2

En ESRI y en otro software SIG, es común tener una carpeta o un conjunto de archivos que forman parte de la clase de entidad o conjunto de datos.
por ejemplo, cobertura de arcinfo, shapefile, geodatabase de archivos.
Estos "conjuntos" de archivos deben ser "unidos" por el software para permitir muchas funciones SIG.
Tablas de atributos, red, controles topológicos.
Ese es el propósito del OID y también la razón para hacerlo no anulable, oculto, controlado por software.

Brad Nesom
fuente
Creo que las operaciones SIG pueden tener algo que ver con esto, realmente. intersección, uniones (espaciales), diferencia, etc. ¿Alguien puede confirmar o presentar esto más detalladamente?
George Silva
Eche un vistazo a cómo una única clase de entidad SDE se almacena realmente en una base de datos como Oracle. Hay una tabla para los atributos, una tabla para la geometría, una tabla para el índice espacial, una o más tablas para los índices de atributos, etc. Si ESRI tuviera que admitir cada codificación de página de caracteres / caracteres para una cadena PKEY, habríamos todos todavía estarán en ArcView 3.x.
blah238
@George: como señala blah238 Hay muy pocas aplicaciones SIG que usen un solo archivo para almacenar ambos (todos) los datos. Que puede consistir en coordenadas, medidas, atributos, reglas, relaciones y más, dependiendo del paquete. Tiene más que ver con poder realizar un seguimiento de qué fila espacial va con qué fila de atributo, qué fila de red, etc.
Brad Nesom
1
Lo siento blah238, realmente no creo que la cantidad de código haya sido determinante en este tema. El encuentro no tiene nada que ver con esto. La base de datos hará los "cálculos" y decidirá si una secuencia de caracteres es igual o no, por lo tanto, aplicando PKEY. No está en la capa de software. @Brad Nesom: eso también tiene sentido. Pero en Oracle y PostGIS puede almacenar todos sus atributos en una sola tabla. Estoy de acuerdo en que los shapefiles necesitaban el temido ObjectID ... ¿y eso puede haber establecido el estándar?
George Silva
@George Shapefiles no era necesario ni, como regla general, usaba un ObjectID. Ese campo OID se introdujo con ArcGIS 8. Por lo tanto, dudo que los shapefiles tengan algo que ver con la pregunta.
whuber