สำหรับนักพัฒนาที่คุ้นเคยกับการทำงานกับระบบฐานข้อมูลอย่าง MySQL หรือ SQL Server การทำความเข้าใจแนวคิดของ Database และ Schema ในระบบ Oracle หรือ PostgreSQL อาจเป็นเรื่องที่สร้างความสับสนได้ เนื่องจากแนวคิดเหล่านี้มีความแตกต่างกันอย่างมีนัยสำคัญในเชิงสถาปัตยกรรม
ในมุมมองทางเทคนิคที่ถูกต้อง Schema คือกลุ่มของ Object (เช่น ตาราง, View, Function) ที่ถูกจัดกลุ่มอย่างเป็นระเบียบ ซึ่งเป็นแนวคิดที่สำคัญกว่าการมองว่า Database เป็นเพียงแค่พื้นที่เก็บข้อมูลขนาดใหญ่ บทความนี้จะเจาะลึกความแตกต่างและโครงสร้างที่ถูกต้องของ Database และ Schema โดยใช้หลักการของ PostgreSQL เพื่อให้คุณเข้าใจการจัดระเบียบข้อมูลได้อย่างมืออาชีพ
Database vs Schema: ความแตกต่างเชิงสถาปัตยกรรม
เพื่อให้เห็นภาพชัดเจนที่สุด เราต้องแยกความแตกต่างระหว่างสองคำนี้ก่อน:
- Database (ฐานข้อมูล): คือหน่วยทางกายภาพ (Physical Container) ที่เป็นขอบเขตสูงสุดในการเก็บข้อมูลทั้งหมด เช่น การสร้างฐานข้อมูลชื่อ ‘ProductionDB’
- Schema (สคีมา): คือหน่วยทางตรรกะ (Logical Container) ที่อยู่ภายใน Database หนึ่งๆ ทำหน้าที่จัดกลุ่ม Object ที่เกี่ยวข้องเข้าด้วยกัน เช่น ‘HR_Schema’ หรือ ‘Finance_Schema’
ในระบบ PostgreSQL, คุณสามารถมี Schema หลายตัวอยู่ภายใน Database ตัวเดียวได้ ซึ่งช่วยให้คุณสามารถแยกการใช้งานของ User หรือ Department ต่างๆ ออกจากกันได้อย่างชัดเจน โดยไม่จำเป็นต้องสร้าง Database ใหม่ทุกครั้ง
หลักการทำงาน: User และ Schema ใน PostgreSQL
แนวคิดที่ว่า User = Schema นั้นเป็นแนวคิดที่ใช้ได้ดีในหลายระบบ แต่ใน PostgreSQL เราจะใช้ Schema เป็นตัวกำหนดขอบเขตการมองเห็น (Visibility Scope) ของ Object ต่างๆ แทน
เมื่อคุณสร้าง User (Role) ใหม่ คุณสามารถกำหนดให้ User นั้นมีสิทธิ์ในการสร้าง Schema ส่วนตัวได้ ซึ่ง Schema นี้จะทำหน้าที่เป็นพื้นที่ส่วนตัวของ User นั้นๆ โดยอัตโนมัติ ทำให้การจัดการสิทธิ์ (Permission Management) มีความละเอียดและปลอดภัยสูงขึ้น
ตัวอย่างการจัดการ Schema ใน PostgreSQL
เราสามารถใช้คำสั่ง SQL เพื่อตรวจสอบและสร้าง Schema ได้ดังนี้:
SQL
SQL
-- 1. ดูรายการ Schema ทั้งหมดใน Database ปัจจุบัน<br>SELECT schema_name FROM information_schema.schemata;
และหากต้องการสร้าง Schema ใหม่เพื่อแยกแผนกบัญชี:
SQL
SQL
CREATE SCHEMA accounting_schema;
จากนั้น User สามารถสร้างตารางภายใน Schema นั้นได้:
SQL
SQL
CREATE TABLE accounting_schema.transactions (id INT, amount VARCHAR(10));
โครงสร้างแบบ Multitenant (การแยกผู้เช่า)
ในระบบขนาดใหญ่ที่รองรับผู้เช่าหลายราย (Multi-tenant Architecture) การใช้ Schema คือแนวทางที่แนะนำอย่างยิ่ง แทนที่จะสร้าง Database แยกกันสำหรับทุกผู้เช่า (ซึ่งจะสิ้นเปลืองทรัพยากร) เราสามารถสร้าง Database หลักเพียงตัวเดียว และใช้ Schema ที่แตกต่างกันสำหรับแต่ละผู้เช่าได้
ตัวอย่างเช่น หากคุณมีผู้เช่า 3 ราย (A, B, C) คุณสามารถสร้าง Schema ชื่อ tenant_a, tenant_b, และ tenant_c ภายใน Database เดียวกัน ทำให้การจัดการสิทธิ์และการสำรองข้อมูลทำได้ง่ายและมีประสิทธิภาพสูง
บทสรุป
โดยสรุปแล้ว การทำความเข้าใจว่า Database คือภาชนะทางกายภาพ และ Schema คือภาชนะทางตรรกะ จะช่วยให้คุณออกแบบระบบฐานข้อมูลได้อย่างมีประสิทธิภาพใน PostgreSQL การใช้ Schema อย่างเป็นระบบไม่เพียงแต่ช่วยจัดระเบียบ Object เท่านั้น แต่ยังเป็นกุญแจสำคัญในการรักษาความปลอดภัยและการจัดการสิทธิ์การเข้าถึงข้อมูลในสภาพแวดล้อมแบบ Multi-tenant อีกด้วย