QGIS에서 일대 다 관계를 수행 할 수있는 도구를 아는 사람이 있습니까?
PostGIS 데이터베이스에 데이터가 있습니다. 공간 또는 비 공간 테이블과 관련된 공간 레이어를 쿼리 할 수 있기를 원합니다. ArcGIS 9.x에는 비슷한 것을 할 수있는 방법이 있다고 생각합니다.
답변
이라는 공간 테이블 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_sample
QGIS 또는 사용중인 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
, 등이 비슷한 공간도합니다. 비 공간 테이블에 숫자 열을 추가하는 경우 가장 적합합니다.