답변:
이라는 공간 테이블 location과 다른 비 공간 테이블을 사용하십시오 sample. 공간적으로 만들기 위해이라는 뷰가 사용됩니다 location_sample. 아래 스키마는 PostGIS 2.0 typmod 구문을 사용하고 있습니다.
CREATE TABLE location(
gid serial NOT NULL,
geom geometry(Point,4326),
name character varying(50) NOT NULL,
CONSTRAINT location_pkey PRIMARY KEY (gid),
CONSTRAINT name_unique UNIQUE (name)
);
CREATE INDEX location_geom_idx ON location USING gist (geom);
CREATE TABLE sample(
sid serial NOT NULL,
name character varying(50) NOT NULL,
location_name character varying(50),
CONSTRAINT sample_pkey PRIMARY KEY (sid),
CONSTRAINT location_name_fkey FOREIGN KEY (location_name)
REFERENCES location (name) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE INDEX fki_location_name_fkey ON sample USING btree (location_name);
CREATE VIEW location_sample AS
SELECT sample.sid, location.geom, sample.location_name, sample.name
FROM location
LEFT JOIN sample ON sample.location_name = location.name;
location_sampleQGIS 또는 사용중인 GIS에 로드 할 수 있어야합니다 . 로 각각 sample을 할당 location_name하면 해당 위치에 나타납니다. QGIS 1.8을 사용하는 경우 고려해야 할 추가 단계가 있습니다. 이보기의 "기본 키"는 sid( "샘플 ID"를 생각하십시오)입니다.
과 사이에 외래 키를 설정하는 방법 은 다음 location과 sample같습니다.
location_name존재하지 않는, 또는 (등 공백, 대시, 경우) 잘못 입력되는 샘플을, 당신이 그것을 사용하는 것을 허용하지 않습니다 (즉, MATCH SIMPLE)location합니다 (의 name필드), 다음에 연결된 모든 샘플 업데이트됩니다 자신의 location_name분야 (예 ON UPDATE CASCADE)location행을, 다음에 연결된 모든 샘플이 삭제됩니다 (예 ON DELETE CASCADE)외래 키 제약 조건을 읽고 다른 행동을 취하십시오. 상황에 더 잘 맞을 수 있습니다.
또한 요약 할 수 sample와 같은 집계 함수를 사용하여 값을 count, min, avg, 등이 비슷한 공간도합니다. 비 공간 테이블에 숫자 열을 추가하는 경우 가장 적합합니다.