Jest to proste, ale być może kontrowersyjne pytanie: dlaczego większość (jeśli nie wszystkie) pakiety GIS wymagają, aby określona warstwa miała unikalny niedopuszczalny identyfikator numeryczny ?
Dlaczego potrzebujemy takiego klucza zastępczego zamiast klucza naturalnego?
Przykłady:
ArcGIS wymusza OBJECTID (lub GlobalID)
QGIS nie ładuje warstw, jeśli nie mają identyfikatora numerycznego.
Odpowiedzi:
Ponieważ muszą mieć zoptymalizowane pole indeksowane. Ciągłe indeksowanie pola ciągów wymagałoby większego obciążenia, a na koniec nie jest tak wydajne.
ESRI faktycznie obsługuje w świecie SDE „GLOBALID”, który jest polem GUID, więc jest to pole 32-kanałowe, ale nadal jest indeksowane w celu zwiększenia wydajności.
źródło
Jeśli rozpocząć dodawanie rekordów do warstwy, która mogłaby polegać na wchodzącego unikalny kod alfanumeryczny dla każdej nowej funkcji użytkownika tuż przed pisania go na dysku ..
.. lub możesz zaimplementować proste pole liczb całkowitych z automatyczną inkrementacją.
źródło
Jak sugerowało wiele osób, jest to kwestia wygody; ale może głębiej, jest to konwencja.
Jako programista, moim pierwszym instynktem byłoby użycie klucza numerycznego dla identyfikatora warstwy, ponieważ zawsze tak było. Rzeczywiście, może nawet nie przyszło mi do głowy, przynajmniej na świadomym poziomie, że powinienem to zrobić w inny sposób. Oczywiście, jeśli istnieje techniczny powód, aby nie używać liczb całkowitych, powiedzmy, czy istnieje możliwość istnienia większej liczby warstw niż może być przechowywana w 32-bitach (bardzo mało prawdopodobna propozycja!), Lub jeśli istnieje uzasadnienie biznesowe, wtedy rozważone zostaną alternatywy.
Istnieją również względy algorytmiczne dotyczące klawiszy numerycznych. Sortowanie i wyszukiwanie listy posortowanych wartości ostatecznie sprowadza się do porównania dwóch liczb, nawet jeśli jest to lista ciągów znaków lub złożonych obiektów; zostają po prostu zamienione na liczby z funkcją haszującą . To powiedziawszy, na współczesnych komputerach przeszukiwanie listy powiedzmy 100, a nawet 1000 pozycji jest zwykle tak szybkie przy użyciu metody brutalnej siły, jak przy wysoce zoptymalizowanym algorytmie. W przypadku warstw w GIS nie widzę nawet najbardziej złożonych map mających więcej niż 1000, a nawet gdyby tak było, inne powiązane obliczenia zajęłyby rzędy wielkości dłuższe niż jakikolwiek niewielki zysk ze zoptymalizowanego wyszukiwanie krótkiej listy.
Klucze całkowite „po prostu mają sens” dla programisty, a jak mówi Brad, więcej wysiłku wymaga użycie kluczy nienumerycznych. Może nie więcej kodu, ale więcej wysiłku umysłowego, a my jesteśmy leniwymi stworzeniami przyzwyczajonymi. Ponadto klucz, który jednoznacznie identyfikuje coś w rodzaju warstwy w GIS, jest uważany za „ukryty” przed użytkownikiem, aby upewnić się, że nie zadziera z nim i nie złamie kodu, który opiera się na jego wyjątkowości (pomimo słów kluczowych DB UNIQUE). Ponieważ jeśli dasz użytkownikowi wystarczającą ilość liny, prędzej czy później ktoś się z nią zawiesi. Wymuszaj unikalność w polu edytowalnym przez użytkownika, ale system bazowy musi założyć, że jego klucz jest unikalny i niezakłócony.
źródło
bigint
do swoich kluczy podstawowych.bigint
s dla wszystkich kluczy podstawowych swoich tabel.To pytanie było mylące dla osób (takich jak ja), które rozwijają geobazę po stronie rzeczy.
Nie jest to ograniczenie pamięci bazy danych, ponieważ PostgreSQL może definiować tabele ze złożonymi KLUCZAMI PODSTAWOWYMI różnych typów danych, jednak tabel tych nie można załadować do programów takich jak QGIS. W powiązanej historycznej notatce PostgreSQL wymagał kolumny OID jako klucza wewnętrznego, który był również 32-bitową liczbą całkowitą. Było to wymagane do wersji 7.2 .
Wymaganie 32-bitowej liczby całkowitej jest naprawdę ograniczeniem programowania. Znacznie łatwiej jest mieć indeks do zestawu rekordów jako stały typ danych (32-bitowa liczba całkowita) i wygodnie jest, aby był to również KLUCZ PODSTAWOWY dla tego rekordu. Trudniej jest pozwolić programowi na użycie złożonego klucza głównego i aby uzyskać unikalny rekord oparty na wielu i / lub różnych typach danych. Jednak podobnie jak OID PostgreSQL, ograniczenie to można przezwyciężyć wraz z czasem programowania. W przypadku QGIS 5-letni błąd może zostać kiedyś rozwiązany (tutaj jest niedawna dyskusja na ten temat).
źródło
W ESRI i innym oprogramowaniu GIS często występuje folder lub zestaw plików tworzących klasę obiektów lub zestaw danych.
np. pokrycie arcinfo, plik kształtu, geobaza plików.
Te „zestawy” plików muszą zostać „połączone” przez oprogramowanie, aby umożliwić wiele funkcji GIS.
Tabele attrubute, kontrola sieci, topologia.
Taki jest cel OID, a także powód, dla którego nie ma on wartości zerowej, jest ukryty, kontrolowany programowo.
źródło