태그 보관물: postgresql

postgresql

PostGIS 데이터베이스에 적합한 글로벌 / 유니버설 고유 식별자는 무엇입니까? 해당 테이블에만 고유

postgreSQL / PostGIS db에서 OID를 기본 키로 사용하는 것은이를 재설정 할 수있는 인스턴스가 있기 때문에 좋지 않습니다. 논리적으로 들리지만 적절한 대안은 무엇입니까? “Universal Unique Identifer”UUID를 사용하는 옵션이 있다고 생각하지만 큰 텍스트와 숫자 값은 끔찍합니다.

내 상황에 대한 배경 지식이 조금 더 있습니다. 해당 테이블의 기본 키이며 해당 테이블에만 고유 한 “gid”라는 필드로 작성된 모든 공간 테이블이 있습니다. 공간 테이블 (모두 “gid”필드가 1부터 시작하여 증가)을 관련 정보가있는 하나의 큰 테이블에 연결하려고하므로 문제가 발생했습니다. 분명히 나의 관계가 작동하려면 모든 공간 특징이 서로 구별되는 고유 식별자가 필요합니다.

편집 됨 Peters의 의견에 따라이 이미지를 추가했습니다. Peter 이것은 내가 머릿속에 가지고있는 아이디어입니다.이 문제를 해결하는 가장 좋은 방법이 아니거나 DB 디자인이 좋지 않을 수도 있습니다. 나는 당신의 생각에 관심이 있습니다.

개념도

팁이 있습니까?



답변

내가 별도의 중간 테이블을 만드는 것 buildings_attach, parcels_attach등 그럼 당신은 글로벌 식별자가 필요하지 않습니다.


답변

두 가지 솔루션 :

1) 단일 시퀀스를 작성하고 모든 테이블이 해당 시퀀스를 사용하도록하십시오. 처음부터 수행하거나 ID 열을 작성하고 테이블을 지금 업데이트 할 수 있습니다.

시퀀스를 만들려면

CREATE SEQUENCE universal_sequence;

그런 다음 테이블 :

CREATE TABLE (
colname integer NOT NULL DEFAULT nextval('universal_sequence'));

기존 테이블 ID 필드를 새 ID로 업데이트하려면 (같은 순서를 따르려는 모든 테이블에 대해 수행) :

UPDATE table1
SET id=nextval('universal_sequence'));

2) 다른 솔루션 : 임시 시퀀스를 생성하고 새 ID 열을 생성하는 쿼리를 실행합니다.

더 여기 : http://www.postgresql.org/docs/8.4/static/sql-createsequence.html


답변

가장 좋은 옵션은 UUID 또는 GUID입니다. 이러한 이유 때문에 어떤 테이블에 관계없이 전 세계적으로 고유합니다. 추한? 예, 그러나이 상황에 가장 적합합니다.

참조 /programming/294933/generate-unique-id-to-share-with-multiple-tables-sql-2008를

나는 내가 (볼이에 대해 정말 adivse 정말 사람들이 ID를 예를 들어 COL1 + somestring + COL2를 만들기 위해 테이블에서 데이터를 사용하는 방법을 것이라고 보았다 여기 ). 지능형 ID는 정말 나쁜 생각입니다.


답변

어이

왜 큰 테이블에서 ID를 가져 와서 대신 공간 테이블에 넣지 않습니까?

공간 테이블 중 하나의 하나의 행이 큰 테이블의 여러 행과 관련이 있으면 문제가 발생합니다. 그렇지 않으면 큰 테이블 ID가 충분하거나 무언가가 누락되었습니다.

/ 니클라스


답변