Gunakan tabel spasial, yang disebut location
, dan tabel non-spasial lainnya sample
,. Untuk membuatnya spasial, digunakan tampilan yang disebut location_sample
. Skema di bawah ini menggunakan sintaks 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;
Anda harus dapat memuat location_sample
dalam QGIS atau GIS apa pun yang Anda gunakan. Tetapkan masing sample
- masing dengan location_name
, dan itu akan muncul di lokasi itu. Jika Anda menggunakan QGIS 1.8, ada langkah ekstra untuk dipertimbangkan . "Kunci utama" untuk tampilan ini adalah sid
(pikirkan "ID sampel").
Bagaimana saya mengatur kunci asing antara location
dan sample
adalah:
- jika Anda mengetik
location_name
sampel dalam yang tidak ada, atau diketik salah (spasi, tanda hubung, kotak, dll.), itu tidak akan memungkinkan Anda untuk menggunakannya (yaitu, MATCH SIMPLE
)
- jika Anda mengganti nama
location
(di name
bidang), maka semua sampel yang terhubung akan memperbarui location_name
bidangnya (yaitu, ON UPDATE CASCADE
)
- jika Anda menghapus satu
location
baris, maka semua sampel yang terhubung akan dihapus (yaitu, ON DELETE CASCADE
)
Bacalah batasan kunci asing untuk mendapatkan perilaku berbeda, yang mungkin lebih cocok dengan situasi Anda.
Anda juga dapat meringkas sample
nilai-nilai menggunakan fungsi agregat, seperti count
, min
, avg
, dll, dan membuat tampilan ruang yang sama. Ini paling masuk akal jika Anda menambahkan kolom numerik ke tabel non-spasial Anda.