ป้ายกำกับ: Information_schema

SQL Server: หา table relationshipsSQL Server: หา table relationships

ในโลกของการพัฒนาซอฟต์แวร์ที่ต้องจัดการข้อมูลจำนวนมาก การทำความเข้าใจโครงสร้างของฐานข้อมูล (Database Schema) เป็นสิ่งสำคัญอย่างยิ่ง โดยเฉพาะอย่างยิ่งเมื่อเราต้องทำงานกับระบบ RDBMS (Relational Database Management System) เช่น PostgreSQL การทราบว่าตารางใดมีความสัมพันธ์กับตารางใดผ่าน Foreign Key (FK) หรือคีย์นอก จะช่วยให้เราสามารถเขียนคำสั่ง SQL ที่แม่นยำ ป้องกันความผิดพลาดในการอ้างอิงข้อมูล และทำให้การ Join ข้อมูลเป็นไปอย่างมีประสิทธิภาพ

Foreign Key คือกลไกที่ใช้เชื่อมโยงข้อมูลระหว่างตาราง โดยตารางหนึ่งจะอ้างอิงถึง Primary Key (PK) ของอีกตารางหนึ่ง ทำให้เกิดความสมบูรณ์ของข้อมูล (Data Integrity) การค้นหาความสัมพันธ์เหล่านี้จึงไม่ใช่แค่การดูโค้ด แต่เป็นการตรวจสอบ Metadata ของระบบฐานข้อมูลโดยตรง

🔍 แนวคิดในการค้นหา Relationships ใน PostgreSQL

ต่างจากระบบฐานข้อมูลบางตัวที่ใช้ System Views เฉพาะทาง PostgreSQL แนะนำให้ใช้ชุด Metadata Views ที่เรียกว่า information_schema ซึ่งเป็นมาตรฐานที่ใช้ได้กับ SQL ส่วนใหญ่ การค้นหาความสัมพันธ์ของตารางจึงต้องอาศัยการ Join ข้อมูลจากหลายๆ View เข้าด้วยกัน เพื่อระบุว่าคอลัมน์ใดในตารางหนึ่งถูกใช้เป็นตัวอ้างอิง (Referencing) ไปยังคอลัมน์ใดในอีกตารางหนึ่ง

เราจะใช้ View เหล่านี้เพื่อดึงข้อมูลเกี่ยวกับข้อจำกัด (Constraints) ที่มีประเภทเป็น FOREIGN KEY ออกมาทั้งหมด

🛠️ PostgreSQL Query: การดึง Foreign Key Relationships

โค้ดด้านล่างนี้คือคำสั่ง SQL ที่สมบูรณ์แบบสำหรับการค้นหาความสัมพันธ์ทั้งหมด (Parent Table, Parent Column, Referenced Table, Referenced Column) ในฐานข้อมูล PostgreSQL ของคุณ:

SQL

SELECT
    tc.constraint_name,
    kcu.table_name AS parent_table,
    kcu.column_name AS parent_column,
    ccu.table_name AS referenced_table,
    ccu.column_name AS referenced_column
FROM
    information_schema.table_constraints AS tc
JOIN
    information_schema.key_column_usage AS kcu
    ON tc.constraint_name = kcu.constraint_name
    AND tc.table_schema = kcu.table_schema
JOIN
    information_schema.constraint_column_usage AS ccu
    ON tc.constraint_name = ccu.constraint_name
    AND tc.table_schema = ccu.table_schema
WHERE
    tc.constraint_type = 'FOREIGN KEY'
ORDER BY
    parent_table, referenced_table;

💡 คำอธิบายโค้ด

  • information_schema.table_constraints (tc): ใช้เพื่อกรองหาข้อจำกัด (Constraints) ทั้งหมด โดยเราจะกรองเฉพาะที่ constraint_type = 'FOREIGN KEY'
  • information_schema.key_column_usage (kcu): ระบุคอลัมน์ที่เป็นตัวอ้างอิง (Parent Column)
  • information_schema.constraint_column_usage (ccu): ระบุคอลัมน์ที่ถูกอ้างอิง (Referenced Column)

✅ บทสรุป

การใช้ information_schema ใน PostgreSQL เป็นวิธีมาตรฐานและทรงพลังที่สุดในการตรวจสอบโครงสร้างความสัมพันธ์ของฐานข้อมูล การทราบความสัมพันธ์เหล่านี้ช่วยให้เราสามารถออกแบบ Query ที่มีประสิทธิภาพสูง (Optimized Query) และยังเป็นรากฐานสำคัญในการสร้างระบบที่ทนทานต่อข้อผิดพลาดของข้อมูล (Data Integrity) ในฐานะ Senior Architect การเข้าใจ Metadata เหล่านี้จึงเป็นทักษะที่ขาดไม่ได้ในการดูแลและพัฒนาระบบที่ใช้ PostgreSQL อย่างแท้จริง