Используйте пространственную таблицу, называемую 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 или любую другую ГИС, которую вы используете. Назначьте каждому sample
с location_name
, и он появится в этом месте. Если вы используете QGIS 1.8, есть дополнительный шаг для рассмотрения . «Первичный ключ» для этого представления sid
(подумайте «образец ID»).
Как я настроить внешний ключ между location
и sample
является:
- если вы
location_name
введете в образец, который не существует или введен неправильно (пробелы, тире, регистр и т. д.), это не позволит вам использовать его (т. е. MATCH SIMPLE
)
- если вы переименуете
location
(в name
поле), то все связанные с ним сэмплы обновят свои location_name
поля (т. е. ON UPDATE CASCADE
)
- если вы удалите
location
строку, то все сэмплы, связанные с ней, будут удалены (т.е. ON DELETE CASCADE
)
Читайте об ограничениях внешнего ключа, чтобы получить различное поведение, которое может лучше соответствовать вашей ситуации.
Кроме того, можно суммировать sample
значения с помощью агрегатных функций, как count
, min
, avg
и т.д., и сделать это подобное пространственное представление. Это имеет смысл, если вы добавляете числовые столбцы в вашу непространственную таблицу.