ในฐานะ Senior Architect ผู้ดูแลระบบขนาดใหญ่ ความท้าทายที่แท้จริงไม่ได้อยู่ที่การเขียนโค้ดให้ทำงานได้ แต่อยู่ที่การออกแบบสถาปัตยกรรม (Architecture) ให้สามารถขยายตัวและบำรุงรักษาได้ตลอดเวลา แนวคิดเชิงวัตถุ (Object-Oriented Programming – OOP) ซึ่งประกอบด้วยหลักการสำคัญอย่าง Inheritance และ Polymorphism คือรากฐานทางความคิดที่ช่วยให้เราจัดการความซับซ้อนนี้ได้
OOP Principles: จาก Java สู่ Database Schema
แม้ว่าแนวคิดเหล่านี้จะมาจากภาษาโปรแกรมอย่าง Java แต่หลักการของมันสามารถถูกนำมาประยุกต์ใช้ในการออกแบบฐานข้อมูลเชิงสัมพันธ์ (Relational Database) ได้ โดยเฉพาะใน PostgreSQL ที่มีความยืดหยุ่นสูง การทำความเข้าใจ ‘ภาวะพหุสัณฐาน’ (Polymorphism) ในบริบทของฐานข้อมูล คือการที่เราสามารถจัดการกับโครงสร้างข้อมูลที่หลากหลายภายใต้รูปแบบหลักเดียวกัน
1. Inheritance และ Supertype/Subtype Pattern
ใน OOP, การสืบทอด (Inheritance) หมายถึงความสัมพันธ์แบบ ‘เป็นส่วนหนึ่งของ’ (is-a relationship) ในการออกแบบฐานข้อมูล เราสามารถจำลองสิ่งนี้ได้โดยใช้รูปแบบ Supertype/Subtype ซึ่งคือการมีตารางหลัก (Supertype Table) ที่เก็บคุณสมบัติร่วมกัน และมีตารางย่อย (Subtype Tables) แยกออกมาเพื่อเก็บรายละเอียดเฉพาะทาง
2. Polymorphism ด้วย JSONB
Polymorphism คือความสามารถในการจัดการวัตถุที่หลากหลายด้วยอินเทอร์เฟซเดียว ใน PostgreSQL เราใช้คุณสมบัติของ JSONB เพื่อให้เกิดความยืดหยุ่น (Flexibility) คล้ายกับการ Overloading/Overriding โดยเราสามารถเก็บข้อมูลที่มีโครงสร้างแตกต่างกันไว้ในคอลัมน์เดียวกันได้ ทำให้ระบบไม่จำเป็นต้องมีตารางใหม่ทุกครั้งที่เพิ่มประเภทของข้อมูล
SQL
-- ตัวอย่างการจำลอง Polymorphism ใน Schema ด้วย PostgreSQL
CREATE TABLE base_entity (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
type TEXT -- ใช้ระบุประเภท (Dog, Cat, Bird)
);
ALTER TABLE base_entity ADD COLUMN details JSONB;
-- การเพิ่มข้อมูลที่หลากหลายภายใต้ตารางเดียว
INSERT INTO base_entity (name, type, details) VALUES
('Fido', 'Dog', '{"breed": "Golden", "sound": "Woof woof!"}'),
('Whiskers', 'Cat', '{"color": "Black", "sound": "Meow."}'
);
-- การ Query ข้อมูลที่หลากหลาย (Polymorphic Query)
SELECT
name,
details->>'sound' AS specific_action,
CASE type WHEN 'Dog' THEN details->>'breed' ELSE NULL END AS breed_info
FROM base_entity;
การใช้ JSONB ในลักษณะนี้ช่วยให้เราสามารถขยายคุณสมบัติ (Attributes) ของเอนทิตี้ใหม่ๆ ได้อย่างรวดเร็ว โดยไม่ต้องแก้ไข Schema หลัก ซึ่งเป็นการจำลองความยืดหยุ่นของ Polymorphism ในระดับสถาปัตยกรรมฐานข้อมูล
บทสรุป: การคิดแบบสถาปนิก (Architectural Thinking)
การเชี่ยวชาญหลักการ OOP ไม่ได้หมายถึงแค่การเขียนโค้ดที่ถูกต้อง แต่คือการยกระดับความคิดในการออกแบบระบบให้สามารถรองรับความไม่แน่นอนและการเปลี่ยนแปลงในอนาคตได้อย่างง่ายดาย การใช้คุณสมบัติขั้นสูงของ PostgreSQL เช่น JSONB และ CTEs ในการจำลองโครงสร้างแบบ Supertype/Subtype จึงเป็นเครื่องยืนยันว่าเราได้นำหลักการสถาปัตยกรรมที่แข็งแกร่งมาสู่ระดับข้อมูล ทำให้ระบบของเรามีความยืดหยุ่นสูง (Highly Maintainable) และพร้อมสำหรับการเติบโตในทุกมิติ