Use uma tabela espacial, chamada location
, e outra tabela não espacial sample
,. Para torná-lo espacial, é usada uma visão chamada location_sample
. O esquema abaixo está usando a sintaxe do typmod do PostGIS 2.0:
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;
Você deve conseguir carregar location_sample
no QGIS ou em qualquer GIS que estiver usando. Atribua cada sample
um com um location_name
e ele aparecerá nesse local. Se você estiver usando o QGIS 1.8, há uma etapa extra a considerar . A "chave primária" para esta visualização é sid
(pense em "ID da amostra").
Como eu configurei a chave estrangeira entre location
e sample
é:
- se você digitar um
location_name
na amostra que não existe ou foi digitado incorretamente (espaços, traços, maiúsculas e minúsculas), não permitirá que você o use (por exemplo, MATCH SIMPLE
)
- se você renomear um
location
(no name
campo), todas as amostras conectadas a ele atualizarão seus location_name
campos (ou seja, ON UPDATE CASCADE
)
- se você excluir uma
location
linha, todas as amostras conectadas a ela serão excluídas (por exemplo, ON DELETE CASCADE
)
Leia as restrições de chave estrangeira para obter comportamentos diferentes, que podem corresponder melhor à sua situação.
Você também pode resumir sample
valores usando funções agregadas, como count
, min
, avg
, etc, e fazer deste um visão espacial similar. Isso faz mais sentido se você adicionar colunas numéricas à sua tabela não espacial.