16, เม.ย. 2010
บทที่ 5 : 5.3ความสัมพันธ์ในฐานข้อมูล

๕.๓ ความสัมพันธ์ในฐานข้อมูล (Database Relationships)

(ในระบบฐานข้อมูลของระบบสารสนเทศภูมิศาสตร์ – GIS)

ในระบบฐานข้อมูลของระบบสารสนเทศภูมิศาสตร์ (Geospatial Database System) การจัดเก็บข้อมูลจะดำเนินการในรูปของ “ตารางข้อมูล (Table)” ซึ่งแต่ละตารางจะประกอบด้วย:

  • เอนทิตี (Entity) หรือชื่อแฟ้มข้อมูล เช่น village, district, population
  • แอตทริบิวต์ (Attribute) หรือคุณลักษณะของข้อมูล เช่น village_name, population_total, district_code

ระบบฐานข้อมูลเชิงสัมพันธ์ (Relational Database) จะอนุญาตให้มีการเชื่อมโยงระหว่างตารางต่าง ๆ ผ่าน ค่ารหัสที่ตรงกัน (Key Matching) โดยเฉพาะการกำหนด Primary Key และ Foreign Key เพื่อสร้าง “ความสัมพันธ์ของข้อมูล” อย่างมีนัยยะ

รูปที่ 5.5 โครงสร้างตารางในแฟ้มข้อมูล


🔗 โครงสร้างความสัมพันธ์ระหว่างตารางในระบบ GIS

ตัวอย่าง: การจัดการข้อมูลประชาชนระดับหมู่บ้าน ในโครงสร้าง GIS

  • ตาราง population เก็บข้อมูลระดับบุคคล เช่น person_id, name, village_code
  • ตาราง village เก็บข้อมูลหมู่บ้าน เช่น village_code, village_name, subdistrict_code
  • ตาราง subdistrict เชื่อมโยงไปยัง district และ province

โดยใช้รหัสร่วม เช่น village_code เป็น Foreign Key ที่เชื่อมกับตาราง village

textCopyEdit[ population ] ← village_code → [ village ] ← subdistrict_code → [ subdistrict ]

🧾 ตัวอย่างความสัมพันธ์ใน GIS (Entity-Relationship: E-R)

ตาราง (Table)Primary Keyเชื่อมโยงกับตารางใด (Foreign Key)
populationperson_idvillage_codevillage.village_code
villagevillage_codesubdistrict_codesubdistrict.subdistrict_code
subdistrictsubdistrict_codedistrict_codedistrict.district_code
districtdistrict_codeprovince_codeprovince.province_code

ความสัมพันธ์นี้ช่วยให้สามารถ:

  • ค้นหาว่าบุคคลหนึ่งอยู่ที่ใดได้อย่างรวดเร็ว
  • แสดงข้อมูลเชิงพื้นที่ เช่น Highlight เขตตำบลที่มีประชากรเกิน 10,000 คน
  • วิเคราะห์ข้อมูลเชิงสถิติในแต่ละระดับพื้นที่

รูปที่ 5.6 โครงสร้างการเชื่อมต่อตารางในแฟ้มข้อมูล


📌 บทบาทของรหัสในการสร้างความสัมพันธ์

ค่าของรหัส เช่น village_code จะเป็น คีย์หลัก (Primary Key) ในตาราง village
และเป็น คีย์ต่างประเทศ (Foreign Key) ในตาราง population
จึงสามารถใช้เป็นจุดเชื่อมในการ สืบค้น (Query) และ เชื่อมข้อมูลเชิงพื้นที่ (Spatial Join) ได้อย่างมีประสิทธิภาพ

ในฐานข้อมูลอาจจะมีความสัมพันธ์อยู่ 3 ประเภทดังนี้

๕.๔.๑ ความสัมพันธ์แบบหนึ่งต่อหนึ่ง (One-to-One Relationship)

(One-to-One Relationship in GIS Relational Databases)

🔎 คำนิยามทางวิชาการ

ความสัมพันธ์แบบหนึ่งต่อหนึ่ง คือ ความสัมพันธ์ระหว่างสองตารางข้อมูล (Table A และ Table B) โดยที่:

แต่ละระเบียน (record) ในตาราง A มีความสัมพันธ์กับระเบียนเพียงหนึ่งเดียวในตาราง B และในทางกลับกัน ระเบียนในตาราง B ก็มีความสัมพันธ์เพียงหนึ่งเดียวกับตาราง A”

ในระบบฐานข้อมูลเชิงสัมพันธ์ (Relational Database System) ความสัมพันธ์ประเภทนี้มีลักษณะเฉพาะว่า ค่าของ Primary Key จากตารางหนึ่งจะสัมพันธ์กับค่าของ Primary Key อีกตารางหนึ่งโดยตรง


🗺️ การประยุกต์ใช้ในระบบฐานข้อมูล GIS

ตัวอย่างในระบบ GIS

ชุดข้อมูลที่แสดง ขอบเขตการปกครองระดับอำเภอ ของจังหวัดปทุมธานี มีทั้งหมด 7 อำเภอ โดยในชุดข้อมูลประกอบด้วย:

  • ตาราง amphoe_map: เก็บรูปแผนที่ (geometry) ของแต่ละอำเภอ
    • amphoe_code (Primary Key)
    • geometry (Polygon)
  • ตาราง amphoe_info: เก็บข้อมูลคำอธิบายเฉพาะของแต่ละอำเภอ
    • amphoe_code (Primary Key)
    • amphoe_name, population, area_sqkm, etc.

ความสัมพันธ์ของตารางนี้คือ 1 อำเภอ → 1 geometry และ 1 ข้อมูลเฉพาะ
(ไม่มีการซ้ำซ้อนทั้งสองฝั่ง)

🔗 ภาพจำลองโครงสร้าง (Conceptual Relationship)

textCopyEdit[ amphoe_map ]                [ amphoe_info ]
+--------------+             +------------------+
| amphoe_code  |◄───────────►| amphoe_code       |
| geometry     |             | amphoe_name       |
+--------------+             | population        |
                             | area_sqkm         |
                             +------------------+

🎯 ประโยชน์ของ One-to-One ใน GIS

  • เหมาะสำหรับการแยกข้อมูลเฉพาะทาง เช่น ข้อมูลสุขภาพ, เศรษฐกิจ หรือข้อมูลลับออกจากตารางหลัก
  • ใช้จัดการ ข้อมูล metadata หรือ รายงานการปรับปรุงแผนที่รายเขต
  • ช่วยลดขนาดของตารางหลัก โดยเก็บเฉพาะข้อมูลจำเป็น และแยกข้อมูลเสริมไว้ตารางเฉพาะ
  • เพิ่มความปลอดภัยและความเป็นส่วนตัวของข้อมูล เช่น แยก amphoe_geometry ออกจาก sensitive_demographics

ข้อควรระวัง

  • ความสัมพันธ์ประเภทนี้ไม่ควรใช้หากมี ข้อมูลฝั่งใดฝั่งหนึ่งสามารถมีมากกว่าหนึ่งระเบียน
  • ในกรณีที่ข้อมูลอาจเพิ่มจำนวนในอนาคต เช่น ผู้ใช้งานหลายคนในตำบลหนึ่ง → ควรใช้ความสัมพันธ์แบบ 1:N

รูปที่ 5.7 การประยุกต์ใช้ความสัมพันธ์แบบหนึ่งต่อหนึ่งในระบบ GIS

๕.๔.๒ ความสัมพันธ์แบบหนึ่งต่อกลุ่ม (One-to-Many Relationship)

(One-to-Many Relationship in Geospatial Databases)

🔎 คำนิยามทางวิชาการ

ความสัมพันธ์แบบหนึ่งต่อกลุ่ม (One-to-Many) คือ ความสัมพันธ์ที่:

แต่ละระเบียนในตาราง A (ต้นทาง) สามารถเชื่อมโยงกับหลายระเบียนในตาราง B (ปลายทาง)
ในขณะที่ แต่ละระเบียนในตาราง B จะสัมพันธ์กับ เพียง 1 ระเบียนในตาราง A เท่านั้น

ความสัมพันธ์ประเภทนี้เป็นโครงสร้างหลักที่ใช้กันอย่างแพร่หลายในระบบฐานข้อมูล โดยเฉพาะในการจัดการ ข้อมูลเชิงพื้นที่ (Spatial Data) ที่มีหน่วยย่อยหลายระดับ เช่น จังหวัด → อำเภอ, ประเภทดิน → หลายพื้นที่ ฯลฯ


🗺️ ตัวอย่างในระบบ GIS: ชุดดินในจังหวัดปทุมธานี

กรณีศึกษา:

ในการจัดทำแผนที่ ขอบเขตชุดดิน (Soil Series Boundaries) ของจังหวัดปทุมธานี มีหลาย polygon ที่แสดงพื้นที่ของชุดดินชนิดเดียวกัน เช่น:

  • ชุดดินรหัส 141 ปรากฏอยู่ใน 2 ตำแหน่งบนแผนที่ → 2 Polygon
  • แต่ ตารางข้อมูลรายละเอียดชุดดิน จะมีข้อมูลของชุดดินรหัส 141 เพียง หนึ่งระเบียน

✳ โครงสร้างข้อมูล:

  • ตาราง soil_map
    • polygon_id (PK), soil_code (FK), geometry
  • ตาราง soil_series
    • soil_code (PK), soil_name, texture, depth, etc.
textCopyEdit[ soil_series ]         [ soil_map ]
+-------------+        +-----------------+
| soil_code   |◄───────| soil_code (FK)  |
| soil_name   |        | polygon_id      |
| texture     |        | geometry        |
+-------------+        +-----------------+

💡 การใช้งานในระบบ GIS

  • สามารถใช้ในการ เชื่อมโยงคุณลักษณะ (Attribute Join) จากตาราง soil_series ไปยัง shapefile หรือ feature class ที่มีหลาย Polygon ได้
  • ใช้ในกรณีที่ entity เชิงพื้นที่ซ้ำ แต่มีคุณลักษณะอ้างอิงชุดเดียวกัน เช่น
    • แปลงปลูกพืช → ชนิดพืช
    • พื้นที่ป่าต่างกัน → ประเภทป่าเดียวกัน
    • พื้นที่น้ำหลายจุด → ประเภทเดียวกัน (เช่น บึง, หนอง)

ข้อดีของ One-to-Many ใน GIS

  • ช่วยลดความซ้ำซ้อนของข้อมูลคุณลักษณะ (เช่น soil properties)
  • ช่วยให้ระบบฐานข้อมูลมีโครงสร้างที่ มีประสิทธิภาพและประหยัดเนื้อที่
  • รองรับการ Query หรือ Filter ข้อมูลที่มีโครงสร้างย่อยซ้ำกันได้ง่าย
  • รองรับการทำ Symbology และ Labeling โดยอิงจากข้อมูลเชื่อมโยง

🧭 แนวทางการสร้างความสัมพันธ์ในโปรแกรม GIS

ใน QGIS หรือ ArcGIS, ความสัมพันธ์นี้มักสร้างผ่าน:

  • Attribute Join (เชื่อมด้วย soil_code)
  • Relate Table (ใน ArcGIS Pro → แบบ One-to-Many)
  • Virtual Layer (ใน QGIS → SQL Join)

รูปที่ 5.8 การประยุกต์ใช้ความสัมพันธ์แบบหนึ่งต่อกลุ่มในระบบ GIS

๕.๔.๓ ความสัมพันธ์แบบกลุ่มต่อกลุ่ม (Many-to-Many Relationship)

(Many-to-Many Relationship in GIS Relational Databases)

🔎 คำนิยามทางวิชาการ

ความสัมพันธ์แบบกลุ่มต่อกลุ่ม หรือ Many-to-Many (M:N) หมายถึง:

แต่ละระเบียนในตาราง A สามารถเชื่อมโยงกับ หลายระเบียนในตาราง B
และในทางกลับกัน แต่ละระเบียนในตาราง B ก็สามารถเชื่อมโยงกับ หลายระเบียนในตาราง A


🗺️ การประยุกต์ใช้ในระบบสารสนเทศภูมิศาสตร์ (GIS)

กรณีศึกษาจาก แผนที่ขอบเขตการปกครองระดับอำเภอของ จ.ปทุมธานี:

▶ ตัวอย่าง:

  • ในตาราง amphoe_map (ตารางแผนที่อำเภอ):
    • อำเภอทุกแห่งในจังหวัดปทุมธานีมี รหัสจังหวัดเดียวกัน คือ 28
    • อำเภอหนึ่งอาจมีหลายตำบล
  • ในตาราง tambon_info (ข้อมูลตำบล):
    • แต่ละตำบลมี รหัสอำเภอซ้ำกัน เช่น 2802 (คลองหลวง) มีหลายตำบล
    • และแต่ละตำบลก็มีรหัสจังหวัดเหมือนกัน คือ 28

ผลลัพธ์:

  • 1 จังหวัด → หลายอำเภอ
  • 1 อำเภอ → หลายตำบล
  • 1 ตำบล → มีรหัสจังหวัดร่วมกับหลายอำเภอ → ก่อให้เกิด ความซ้อนทับของความสัมพันธ์

🔗 การจัดการความสัมพันธ์แบบกลุ่มต่อกลุ่มในฐานข้อมูล GIS

เนื่องจาก ฐานข้อมูลเชิงสัมพันธ์ (RDBMS) ไม่สามารถแสดงความสัมพันธ์แบบ M:N ได้โดยตรง
วิธีที่ใช้แก้ปัญหา คือการใช้ ตารางเชื่อมกลาง (Join Table) หรือที่เรียกว่า:

Associative Entity หรือ Link Table

ตัวอย่าง:

Table A (project)Table B (village)Link Table (project_village)
project_idvillage_idproject_id, village_id

ในระบบ GIS:

  • ตาราง amphoe เชื่อมกับ tambon โดยผ่าน amphoe_tambon_relation
  • ตารางนี้จะมีหลาย tambon_code ที่สัมพันธ์กับ amphoe_code หนึ่งเดียว และในทางกลับกัน

📘 ประโยชน์ของความสัมพันธ์แบบ M:N ใน GIS

  • ช่วยวิเคราะห์ความสัมพันธ์ระหว่าง หน่วยเชิงพื้นที่กับกิจกรรม/ข้อมูลเสริม
    เช่น:
    • 1 ตำบลมีหลายโครงการ
    • 1 โครงการดำเนินในหลายตำบล
  • ใช้เชื่อมโยงกับข้อมูลเชิงคุณลักษณะ เช่น:
    • แผนที่พื้นที่เสี่ยงภัย กับหลายประเภทของภัยพิบัติ
    • แผนที่ใช้ที่ดินกับหลายกิจกรรมเกษตรกรรม
  • เหมาะกับการวิเคราะห์ในระบบ Overlay และ Thematic Mapping

ข้อควรระวัง

  • ความสัมพันธ์แบบ M:N ซับซ้อนและอาจเข้าใจยาก
  • ต้องออกแบบฐานข้อมูลอย่างมีโครงสร้าง โดยใช้ ตารางกลาง (Intermediate Table) เสมอ
  • ต้องกำหนดคีย์ร่วม (Composite Key) เพื่อให้การเชื่อมโยงสมบูรณ์

📊 เปรียบเทียบรูปแบบความสัมพันธ์ในฐานข้อมูล GIS

ประเภทความสัมพันธ์ลักษณะการเชื่อมโยงวิธีการใช้ใน GIS
One-to-One (1:1)1 → 1เก็บข้อมูลเฉพาะเพิ่มเติมแบบไม่ซ้ำ
One-to-Many (1:N)1 → หลายพื้นที่เดียวมีหลายองค์ประกอบ (ex. ที่นา)
Many-to-Many (M:N)หลาย ↔ หลายพื้นที่/ข้อมูลเชื่อมโยงหลายรายการ

🧾 สรุปเชิงวิชาการ

ความสัมพันธ์แบบกลุ่มต่อกลุ่ม (M:N) เป็นโครงสร้างที่จำเป็นต่อการจัดการข้อมูล GIS ที่มีลักษณะซับซ้อน เช่น การจัดการพื้นที่โครงการ, พื้นที่ที่อยู่ภายใต้หน่วยงานหลายฝ่าย หรือการวิเคราะห์พื้นที่ที่มีคุณลักษณะทับซ้อนหลายประเภท ซึ่งจำเป็นต้องใช้ตารางกลางในการอธิบายความสัมพันธ์ดังกล่าวอย่างชัดเจน

รูปที่ 5.9 การประยุกต์ใช้ความสัมพันธ์แบบกลุ่มต่อกลุ่มในระบบ GIS

ตัวอย่างโครงสร้างฐานข้อมูลแบบ Many-to-Many (M:N) สำหรับใช้ใน QGIS โดยเฉพาะเมื่อคุณต้องการจัดการความสัมพันธ์ระหว่าง ข้อมูลเชิงพื้นที่ (Spatial) กับ ข้อมูลเชิงคุณลักษณะ (Attribute) ที่มีความซับซ้อน เช่น:

“หลายพื้นที่สามารถเชื่อมโยงกับหลายกิจกรรม”
เช่น: 1 หมู่บ้านอาจเข้าร่วมหลายโครงการ และ 1 โครงการอาจดำเนินในหลายหมู่บ้าน


🧱 1. โครงสร้างฐานข้อมูล M:N ใน QGIS

📘 ตารางหลัก: village (Feature Layer)

Field NameTypeKeyDescription
village_idIntegerPKรหัสหมู่บ้าน
village_nameTextชื่อหมู่บ้าน
geometryGeometryPolygon (ขอบเขตหมู่บ้าน)

📗 ตารางรอง: project (Attribute Table)

Field NameTypeKeyDescription
project_idIntegerPKรหัสโครงการ
project_nameTextชื่อโครงการ
yearIntegerปีงบประมาณ

🔗 ตารางกลาง: village_project_link (Relational Table)

Field NameTypeKeyDescription
link_idIntegerPKลำดับการเชื่อมโยง
village_idIntegerFK → village.village_idรหัสหมู่บ้าน
project_idIntegerFK → project.project_idรหัสโครงการ
roleTextบทบาทของหมู่บ้านในโครงการ

🔧 2. การใช้งานใน QGIS

ขั้นตอนการเชื่อมข้อมูล (Relational Join)

  1. เปิด Project ใน QGIS
  2. ไปที่เมนู Project > Properties > Relations
  3. สร้างความสัมพันธ์ดังนี้:

ความสัมพันธ์ที่ 1:

  • ชื่อ: village_has_projects
  • Referencing Layer: village_project_link
  • Referenced Layer: village
  • Field Match: village_project_link.village_idvillage.village_id

ความสัมพันธ์ที่ 2:

  • ชื่อ: project_in_villages
  • Referencing Layer: village_project_link
  • Referenced Layer: project
  • Field Match: village_project_link.project_idproject.project_id
  1. เมื่อสร้างความสัมพันธ์เสร็จแล้ว ให้กลับไปดูที่ Attribute Form ของแต่ละหมู่บ้านหรือโครงการ จะพบ แท็บย่อยที่แสดงความสัมพันธ์แบบหลายรายการ ซึ่งสามารถดูหรือเพิ่มได้

🧪 ตัวอย่างการใช้งาน

  • สืบค้นว่าหมู่บ้านใดเข้าร่วมโครงการ “เกษตรพอเพียง” ปี 2566
  • ดูว่ามีโครงการใดดำเนินการใน village_id = 106501 ตั้งแต่ปี 2564–2567
  • ใช้ form widget ใน QGIS เพื่อ เพิ่มโครงการใหม่ให้หมู่บ้านได้โดยตรง

ข้อดีของ M:N Structure ใน QGIS

  • รองรับการแสดง ข้อมูลซ้อนกัน (overlay) เช่น โครงการซ้อนทับกัน
  • รองรับการวิเคราะห์แบบ relational เช่น การหาความถี่ของโครงการในแต่ละพื้นที่
  • ใช้ form view ใน QGIS สำหรับการป้อนข้อมูลแบบ relational ได้ทันที

ใส่ความเห็น

Related Posts