이것은 간단하지만 논란의 여지가있는 질문입니다. 왜 대부분의 GIS 패키지가 결정된 레이어에 고유 한 널 입력 가능 숫자 식별자가 필요합니까?
자연스럽게 대신에 그러한 대리 키가 필요한 이유는 무엇입니까?
예 :
ArcGIS는 OBJECTID (또는 GlobalID)를 시행합니다
QGIS는 숫자 ID가없는 레이어를로드하지 않습니다.
이것은 간단하지만 논란의 여지가있는 질문입니다. 왜 대부분의 GIS 패키지가 결정된 레이어에 고유 한 널 입력 가능 숫자 식별자가 필요합니까?
자연스럽게 대신에 그러한 대리 키가 필요한 이유는 무엇입니까?
예 :
ArcGIS는 OBJECTID (또는 GlobalID)를 시행합니다
QGIS는 숫자 ID가없는 레이어를로드하지 않습니다.
답변:
최적화 된 색인 작성 가능 필드가 필요하기 때문입니다. 문자열 필드를 반복해서 색인화하려면 더 많은 오버 헤드가 필요하며 결국에는 효율적이지 않습니다.
ESRI는 실제로 SDE 세계에서 GUID 필드 인 'GLOBALID'를 지원하므로이 필드는 32char 필드이지만 여전히 성능을 향상시키기 위해 색인화됩니다.
많은 사람들이 제안했듯이, 그것은 편의의 문제입니다. 그러나 아마도 더 심오한 것은 컨벤션입니다.
프로그래머로서 필자의 첫 번째 본능은 레이어 ID에 숫자 키를 사용하는 것이 었습니다. 이것이 항상 수행 된 방식이기 때문입니다. 실제로, 적어도 다른 방법으로해야한다는 것은 의식 수준에서 나에게 일어나지 않을 수도 있습니다. 물론 정수를 사용하지 않는 기술적 이유가있는 경우 32 비트에 저장할 수있는 것보다 더 많은 레이어가있을 가능성이 있거나 (매우 가능성이 낮습니다!) 비즈니스상의 이유가있는 경우, 대안이 고려 될 것이다.
숫자 키에 대한 알고리즘 고려 사항도 있습니다. 정렬 된 값 목록을 정렬하고 검색하면 결국 문자열이나 복잡한 객체 목록 인 경우에도 두 숫자를 비교할 수 있습니다. 단지 해싱 함수 로 숫자로 바뀔뿐입니다 . 현대 컴퓨터에서는 100 개 또는 1000 개 항목의 목록을 검색하는 것이 일반적으로 고도로 최적화 된 알고리즘을 사용하는 것처럼 무차별 대입 방식을 사용하는 것만 큼 빠릅니다. GIS의 레이어의 경우 1000 개 이상의 맵이있는 가장 복잡한 맵조차 볼 수 없으며, 그렇게해도 다른 관련 계산은 최적화 된 작은 이익보다 몇 배나 더 오래 걸립니다 짧은 목록 검색.
정수 키는 프로그래머에게 "상당히 의미가 있습니다". Brad가 말했듯이 숫자가 아닌 키를 사용하는 데 더 많은 노력이 있습니다. 어쩌면 더 많은 코드가 아니라 더 많은 정신적 노력이 있고 우리는 게으른 습관의 생물입니다. 또한, GIS에서 레이어와 같은 것을 고유하게 식별하는 키는 사용자로부터 "숨겨진"것으로 간주되어 해당 레이어를 엉망으로 만들지 않고 고유성에 의존하는 코드를 손상시킵니다 (DB UNIQUE 키워드에도 불구하고). 사용자에게 충분한 로프를 주면 조만간 누군가가 로프에 매달릴 수 있기 때문입니다. 항상 사용자 편집 가능 필드에서 고유성을 적용하지만 기본 시스템 은 해당 키가 고유하고 변조되지 않은 것으로 가정 해야합니다 .
bigint
기본 키에 사용 합니다.
bigint
모든 테이블의 기본 키에 s를 사용 합니다.
이 질문은 지오 데이터베이스 측면을 개발하는 사람들 (나 같은 사람)에게 혼란스러운 질문이었습니다.
PostgreSQL은 다양한 데이터 유형의 복합 PRIMARY KEYS를 사용하여 테이블을 정의 할 수 있으므로 데이터베이스 스토리지의 제한은 없지만 QGIS와 같은 프로그램에는 이러한 테이블을로드 할 수 없습니다. 관련 기록에서 PostgreSQL 은 32 비트 정수이기도 한 OID 열을 내부 키로 요구했습니다 . 버전 7.2까지 필요했습니다 .
32 비트 정수 ID 요구 사항은 실제로 프로그래밍 제한 사항입니다. 고정 된 데이터 유형 (32 비트 정수)으로 레코드 세트에 대한 색인을 갖는 것이 훨씬 간단하며, 해당 레코드의 기본 키가되는 것이 편리합니다. 프로그램이 복합 기본 키를 허용하고 여러 데이터 유형 및 / 또는 다양한 데이터 유형을 기반으로 고유 한 레코드를 검색하는 것이 더 어렵습니다. 그러나 PostgreSQL의 OID와 마찬가지로이 제한은 개발 시간으로 극복 할 수 있습니다. QGIS의 경우 [현재] 5 년 된 버그 가 언젠가 해결 될 수 있습니다 ( 이 주제에 대한 최근 토론이 있습니다).
ESRI 및 기타 GIS 소프트웨어에서 피쳐 클래스 또는 데이터 세트를 작성하는 폴더 또는 파일 세트를 갖는 것이 일반적입니다.
예를 들어 arcinfo 적용 범위, shapefile, 파일 지오 데이터베이스.
이러한 "파일 세트"는 많은 GIS 기능을 허용하기 위해 소프트웨어에 의해 "결합"되어야합니다.
Attrubute 테이블, 네트워크, 토폴로지 컨트롤.
이것이 OID의 목적이며 Null을 허용하지 않고 숨겨진 소프트웨어로 제어하는 이유이기도합니다.