ในการทำงานกับฐานข้อมูลขนาดใหญ่ เรามักจะต้องดึงข้อมูลจากตารางที่อยู่ใน Schema ต่างๆ ซึ่งตามหลักการแล้ว เราจะต้องเขียนคำสั่งแบบเต็มรูปแบบ เช่น SELECT * FROM other_schema.my_table; การพิมพ์ชื่อ Schema นำหน้าทุกครั้งอาจสร้างความยุ่งยากและทำให้โค้ดดูยาวเกินความจำเป็น
บทความนี้จะแนะนำ 2 วิธีหลักใน PostgreSQL ที่ช่วยให้คุณสามารถเข้าถึงข้อมูลจาก Schema อื่นได้ง่ายขึ้น โดยไม่ต้องระบุชื่อ Schema นำหน้าอย่างชัดเจน
1. การกำหนด Schema Search Path (วิธีชั่วคราว)
วิธีที่ง่ายและรวดเร็วที่สุดในการทำให้ PostgreSQL มองเห็นตารางจาก Schema อื่นชั่วคราว คือการใช้คำสั่ง SET search_path คำสั่งนี้จะกำหนดลำดับของ Schema ที่ระบบจะค้นหาเมื่อคุณระบุชื่อตารางโดยไม่มี Schema นำหน้า
สมมติว่าคุณต้องการให้ระบบมองเห็น Schema ชื่อ reporting ก่อน Schema หลักของคุณ การตั้งค่าจะเป็นดังนี้:
SQL
SQL
SET search_path TO reporting, public;
หลังจากตั้งค่าแล้ว คุณสามารถเรียกใช้ตารางจาก Schema reporting ได้โดยตรง:
SQL
SQL
SELECT * FROM sales_data WHERE product_id = '1,2,3';
ข้อดี: สะดวก รวดเร็ว และใช้ได้เฉพาะในเซสชัน (Session) นั้นๆ เท่านั้น
2. การสร้าง View (วิธีถาวรและปลอดภัยกว่า)
หากคุณต้องเข้าถึงตารางจาก Schema อื่นบ่อยครั้งและต้องการให้การเข้าถึงนั้นเป็นแบบถาวรและเป็นมาตรฐานที่ดีกว่าการเปลี่ยน search_path คือการสร้าง VIEW (มุมมอง) VIEW ทำหน้าที่เป็นตารางเสมือนที่ซ่อนความซับซ้อนของการอ้างอิง Schema ทำให้คุณสามารถเรียกใช้ข้อมูลได้ราวกับว่าตารางนั้นอยู่ใน Schema ของคุณเอง
ตัวอย่างเช่น หากคุณต้องการเข้าถึงตาราง inventory ที่อยู่ใน Schema warehouse คุณสามารถสร้าง View ใน Schema ของคุณเองได้:
SQL
SQL
CREATE VIEW local_inventory AS SELECT * FROM warehouse.inventory;
หลังจากสร้าง View แล้ว คุณสามารถ Query ข้อมูลได้โดยไม่ต้องกังวลเรื่อง Schema ต้นทางอีกต่อไป:
SQL
SQL
SELECT * FROM local_inventory WHERE item_code = 'apple';
ข้อดี: เป็นการสร้างชั้นการเข้าถึงข้อมูล (Abstraction Layer) ที่ชัดเจน ทำให้การจัดการสิทธิ์ (Permission) และการบำรุงรักษาง่ายกว่าการเปลี่ยน search_path
ข้อควรระวังและแนวทางปฏิบัติที่ดีที่สุด
- สิทธิ์ (Permissions): ไม่ว่าคุณจะใช้วิธีใดก็ตาม ผู้ใช้ (User) ที่รันคำสั่งจะต้องมีสิทธิ์
SELECTอย่างชัดเจนบนตารางต้นฉบับ (other_schema.my_table) มิฉะนั้นการ Query จะล้มเหลว - ความชัดเจน: การใช้
VIEWถือเป็นแนวทางปฏิบัติที่ดีที่สุด (Best Practice) ในระดับสถาปัตยกรรม เพราะมันทำให้โค้ดของคุณมีความชัดเจนว่าข้อมูลนี้มาจากที่ไหน แม้ว่าคุณจะเรียกใช้มันด้วยชื่อที่สั้นลง
บทสรุป
การจัดการการอ้างอิง Schema ใน PostgreSQL สามารถทำได้หลายวิธี ทั้งการใช้ SET search_path สำหรับการใช้งานชั่วคราว และการใช้ CREATE VIEW สำหรับการสร้างชั้นการเข้าถึงข้อมูลที่ถาวรและเป็นระบบ การเลือกใช้วิธีที่เหมาะสมจะช่วยให้โค้ด SQL ของคุณมีความกระชับ อ่านง่าย และยังคงรักษาความปลอดภัยของระบบฐานข้อมูลได้อย่างครบถ้วน