ใช้ตารางอวกาศที่เรียกว่าและโต๊ะที่ไม่ใช่เชิงพื้นที่อื่น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ฯลฯ และทำให้เรื่องนี้เป็นมุมมองเชิงพื้นที่ที่คล้ายกัน วิธีนี้เหมาะสมที่สุดหากคุณเพิ่มคอลัมน์ที่เป็นตัวเลขลงในตารางที่ไม่ใช่เชิงพื้นที่