Utiliser une table spatiale, appelée location
, et une autre table non spatiale, sample
. Pour le rendre spatial, une vue est utilisée appelée location_sample
. Le schéma ci-dessous utilise la syntaxe typmod de 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;
Vous devriez pouvoir charger location_sample
dans QGIS ou tout autre SIG que vous utilisez. Attribuez à chacun sample
un location_name
, et il apparaîtra à cet endroit. Si vous utilisez QGIS 1.8, il y a une étape supplémentaire à considérer . La "clé primaire" de cette vue est sid
(pensez à "ID échantillon").
Comment j'ai configuré la clé étrangère entre location
et sample
c'est:
- si vous tapez un
location_name
exemple dans qui n'existe pas ou qui est mal tapé (espaces, tirets, casse, etc.), il ne vous permettra pas de l'utiliser (c.-à-d. MATCH SIMPLE
)
- si vous renommez un
location
(dans le name
champ), tous les échantillons qui y sont connectés mettront à jour leurs location_name
champs (c.-à-d. ON UPDATE CASCADE
)
- si vous supprimez une
location
ligne, tous les échantillons qui y sont connectés seront supprimés (c.-à-d. ON DELETE CASCADE
)
Renseignez-vous sur les contraintes de clé étrangère pour obtenir des comportements différents, qui pourraient mieux correspondre à votre situation.
Vous pouvez également résumer les sample
valeurs en utilisant des fonctions d' agrégation, comme count
, min
, avg
, etc, et faire une vue spatiale similaire. Cela a plus de sens si vous ajoutez des colonnes numériques à votre table non spatiale.