Utilizzare una tabella spaziale, chiamata location
, e un altro tavolo non spaziale, sample
. Per renderlo spaziale, viene utilizzata una vista chiamata location_sample
. Lo schema seguente utilizza la sintassi typmod di 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;
Dovresti essere in grado di caricare location_sample
in QGIS o qualunque GIS che stai utilizzando. Assegna a ciascuno sample
un simbolo location_name
e verrà visualizzato in quella posizione. Se si utilizza QGIS 1.8, è necessario considerare un ulteriore passaggio . La "chiave primaria" per questa vista è sid
(pensa a "ID campione").
Come ho impostato la chiave esterna tra location
ed sample
è:
- se si digita un
location_name
esempio inesistente o digitato in modo errato (spazi, trattini, case, ecc.), non sarà possibile utilizzarlo (ad es. MATCH SIMPLE
)
- se si rinomina un
location
(nel name
campo), tutti i campioni collegati ad esso aggiorneranno i loro location_name
campi (cioè, ON UPDATE CASCADE
)
- se elimini una
location
riga, verranno eliminati tutti i campioni ad essa collegati (ad es. ON DELETE CASCADE
)
Leggi i vincoli delle chiavi esterne per ottenere comportamenti diversi, che potrebbero corrispondere meglio alla tua situazione.
È inoltre possibile riassumere sample
i valori utilizzando le funzioni di aggregazione, come count
, min
, avg
, ecc, e fanno di questo una vista spaziale simile. Questo ha molto senso se aggiungi colonne numeriche alla tua tabella non spaziale.