PlusMagi's Blog By Pitt Phunsanit Database Oracle: การ Query ข้อมูลโดยไม่พิมพ์ชื่อ Schema

Oracle: การ Query ข้อมูลโดยไม่พิมพ์ชื่อ Schema

ในการทำงานกับฐานข้อมูลขนาดใหญ่ เรามักจะต้องดึงข้อมูลจากตารางที่อยู่ใน 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 ของคุณมีความกระชับ อ่านง่าย และยังคงรักษาความปลอดภัยของระบบฐานข้อมูลได้อย่างครบถ้วน