Використовуйте просторову таблицю, яка називається location
, а інша непросторової таблицею sample
. Щоб зробити його просторовим, використовується подання, яке називається location_sample
. Наведена нижче схема використовує синтаксис типового типу 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;
Ви повинні мати можливість завантажуватися location_sample
в QGIS або будь-який інший GIS, який ви використовуєте. Призначте кожного sample
зі знаком location_name
, і він з’явиться в цьому місці. Якщо ви використовуєте QGIS 1.8, є додатковий крок . "Первинний ключ" для цього перегляду є sid
(подумайте "зразок ідентифікатора").
Як я встановив зовнішній ключ між location
і sample
:
- якщо ви введете
location_name
зразок, який не існує або введений неправильно (пробіли, тире, регістр тощо), він не дозволить вам використовувати його (тобто MATCH SIMPLE
)
- якщо ви перейменовуєте a
location
(у name
поле), то всі підключені до нього зразки оновлять свої location_name
поля (тобто ON UPDATE CASCADE
)
- якщо ви видалите
location
рядок, всі зразки, підключені до нього, будуть видалені (тобто ON DELETE CASCADE
)
Прочитайте про обмеження закордонних ключів, щоб отримати різні способи поведінки, які можуть краще відповідати вашій ситуації.
Крім того, можна підсумувати sample
значення з допомогою агрегатних функцій, як count
, min
, avg
і т.д., і зробити це подібне просторове уявлення. Це має найбільш сенс, якщо ви додаєте числові стовпці до своєї непросторової таблиці.