Czytałem, że używanie identyfikatorów OID jako klucza podstawowego w bazie danych PostgreSQL / PostGIS jest słabą praktyką, ponieważ istnieją przypadki, w których można je zresetować. Brzmi logicznie, ale jaka jest odpowiednia alternatywa? Wierzę, że istnieje możliwość użycia identyfikatora UUID „Universal Unique Identifer”, ale duża wartość tekstu i liczby, która wyrzuca, jest straszna.
Jeszcze trochę tła do mojej sytuacji. Mam wszystkie moje tabele przestrzenne utworzone za pomocą pola o nazwie „gid”, które jest podstawowym kluczem dla tej tabeli i jest unikalne tylko dla tej tabeli. Mam teraz problem, ponieważ chcę powiązać moje tabele przestrzenne (wszystkie z polem „gid” rozpoczynającym się od 1 i zwiększającym) do jednej dużej tabeli z powiązanymi informacjami. Oczywiście, aby mój związek działał, wszystkie moje cechy przestrzenne potrzebują unikalnego identyfikatora, który odróżnia je od siebie.
ZMIENIONO Dodano to zdjęcie zgodnie z komentarzem Petersa. Peter, to jest pomysł, który mam w głowie, może to nie być najlepszy sposób, aby to zrobić lub nawet nie może to być dobry projekt db. Interesuje mnie to, co myślisz.
Jakieś wskazówki?
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.
Dlaczego ma to znaczenie, jak wygląda unikalny identyfikator?Odpowiedzi:
Chciałbym utworzyć oddzielne tabele pośredniczących
buildings_attach
,parcels_attach
itp Wtedy nie trzeba globalny identyfikator.źródło
Dwa rozwiązania:
1) Utwórz pojedynczą sekwencję i spraw, aby wszystkie tabele korzystały z tej sekwencji, można to zrobić od początku lub możesz utworzyć kolumnę identyfikatora i zaktualizować tabele teraz.
Aby utworzyć sekwencję:
Następnie stół:
Aby zaktualizować istniejące pole identyfikatora tabeli o nowe identyfikatory (zrób to dla wszystkich tabel, które chcesz wykonać w tej samej kolejności):
2) Drugie rozwiązanie: Utwórz tymczasową sekwencję i uruchom zapytanie, tworząc nową kolumnę identyfikatora.
Więcej tutaj: http://www.postgresql.org/docs/8.4/static/sql-createsequence.html
źródło
Najlepszą opcją jest UUID lub GUID. Z tego powodu zostały zbudowane, unikalne na całym świecie bez względu na stół. Brzydki? Tak, ale są najlepsze w tej sytuacji.
Zobacz /programming/294933/generate-unique-id-to-share-with-multiple-tables-sql-2008
Widziałem metody, w których ludzie używają danych z tabeli do tworzenia identyfikatorów, np. Col1 + somestring + col2, naprawdę bym się temu przeciwdziałał (patrz tutaj ). Inteligentne identyfikatory to naprawdę zły pomysł.
źródło
Halo
Dlaczego nie bierzesz identyfikatora z dużego stołu i zamiast tego wstawiasz do tabel przestrzennych?
Jeśli jeden wiersz w jednej z tabel przestrzennych odnosi się do wielu wierszy w dużej tabeli, widzę problem, w przeciwnym razie identyfikator dużej tabeli powinien wystarczyć lub coś mi brakuje.
/ Nicklas
źródło