ใช้ตารางอวกาศที่เรียกว่าและโต๊ะที่ไม่ใช่เชิงพื้นที่อื่นlocation
เพื่อให้พื้นที่มุมมองที่ถูกนำมาใช้เรียกว่าsample
location_sample
สคีมาด้านล่างใช้ไวยากรณ์ PostGIS 2.0 typmod:
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
(คิดว่า "ตัวอย่าง ID")
วิธีที่ฉันตั้งค่าforeign keyระหว่างlocation
และsample
คือ:
- หากคุณพิมพ์ a
location_name
ในตัวอย่างที่ไม่มีอยู่หรือพิมพ์ไม่ถูกต้อง (ช่องว่าง, ขีดกลาง, ตัวพิมพ์เล็กและอื่น ๆ ) มันจะไม่อนุญาตให้คุณใช้งาน (เช่นMATCH SIMPLE
)
- หากคุณเปลี่ยนชื่อ a
location
(ในname
ช่อง) ตัวอย่างทั้งหมดที่เชื่อมต่อกับมันจะอัปเดตlocation_name
ฟิลด์ของพวกเขา(เช่นON UPDATE CASCADE
)
- หากคุณลบ
location
แถวตัวอย่างทั้งหมดที่เชื่อมต่อกับแถวนั้นจะถูกลบ (เช่นON DELETE CASCADE
)
อ่านข้อ จำกัด ต่างประเทศของคีย์เพื่อรับพฤติกรรมที่แตกต่างกันซึ่งอาจตรงกับสถานการณ์ของคุณมากขึ้น
นอกจากนี้คุณยังสามารถสรุปsample
ค่าใช้ฟังก์ชันการรวมเช่นcount
, min
, avg
ฯลฯ และทำให้เรื่องนี้เป็นมุมมองเชิงพื้นที่ที่คล้ายกัน วิธีนี้เหมาะสมที่สุดหากคุณเพิ่มคอลัมน์ที่เป็นตัวเลขลงในตารางที่ไม่ใช่เชิงพื้นที่