Użyj tabeli przestrzennego, zwany location
oraz inną tabelę non-przestrzenną, sample
. Aby uczynić go przestrzennym, używany jest widok o nazwie location_sample
. Poniższy schemat wykorzystuje składnię typmod 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;
Powinieneś być w stanie załadować location_sample
w QGIS lub dowolnym GIS, którego używasz. Przydziel każdemu sample
z location_name
, a pojawi się w tym miejscu. Jeśli używasz QGIS 1.8, musisz rozważyć dodatkowy krok . „Kluczem podstawowym” dla tego widoku jest sid
(pomyśl „identyfikator próbki”).
Jak skonfigurowałem klucz obcy między location
i sample
jest:
- jeśli wpiszesz
location_name
w próbce, która nie istnieje lub jest wpisana niepoprawnie (spacje, myślniki, wielkość liter itp.), nie pozwoli ci to użyć (tj. MATCH SIMPLE
)
- jeśli zmienisz nazwę
location
(w name
polu), wówczas wszystkie próbki do niej podłączone zaktualizują swoje location_name
pola (tj. ON UPDATE CASCADE
)
- jeśli usuniesz
location
wiersz, wszystkie połączone z nim próbki zostaną usunięte (tj. ON DELETE CASCADE
)
Przeczytaj o ograniczeniach klucza obcego, aby uzyskać różne zachowania, które mogą lepiej pasować do Twojej sytuacji.
Można również podsumować sample
wartości przy użyciu funkcji agregujących, jak count
, min
, avg
itp, i zrobić to podobny widok przestrzenny. Ma to sens, jeśli dodasz kolumny numeryczne do tabeli nieprzestrzennej.