JSON (JavaScript Object Notation) คือรูปแบบมาตรฐานสากลในการจัดเก็บและรับส่งข้อมูลที่มีโครงสร้างแบบ Key-Value Pair ซึ่งได้รับความนิยมอย่างสูงในโลกของ API และ Microservices เนื่องจากความเรียบง่ายและอ่านง่าย แม้ว่า JSON จะมีชื่อที่มาจาก JavaScript แต่ในทางปฏิบัติ มันได้กลายเป็นภาษาข้อมูลหลักที่ใช้ในการสื่อสารระหว่างระบบต่างๆ ทั่วโลก
สำหรับนักพัฒนาที่ใช้ระบบฐานข้อมูลเชิงสัมพันธ์ (Relational Database) อย่าง PostgreSQL การจัดการข้อมูล JSON อาจดูเป็นเรื่องใหม่ แต่ PostgreSQL ได้พัฒนาคุณสมบัติที่ทรงพลังอย่าง JSONB (Binary JSON) เพื่อให้คุณสามารถจัดเก็บและ Query ข้อมูล JSON ได้อย่างมีประสิทธิภาพเทียบเท่ากับฐานข้อมูล NoSQL โดยไม่สูญเสียความสามารถในการทำ Index และ Transaction ของ SQL ไปเลย
ทำความเข้าใจ JSONB ใน PostgreSQL
ใน PostgreSQL เราควรใช้ประเภทข้อมูล JSONB แทน JSON เสมอ เนื่องจาก JSONB จะจัดเก็บข้อมูลในรูปแบบไบนารี (Binary) ทำให้การ Query ข้อมูลทำได้รวดเร็วกว่ามาก และสามารถสร้าง Index ได้อย่างเต็มประสิทธิภาพ
การสร้างตารางและการจัดเก็บข้อมูล JSONB
สมมติว่าเราต้องการเก็บข้อมูลโปรไฟล์ผู้ใช้งานที่มีรายละเอียดที่หลากหลาย (เช่น ข้อมูลติดต่อ, ความสนใจ) ซึ่งโครงสร้างอาจมีการเปลี่ยนแปลงได้บ่อย การใช้ JSONB จะยืดหยุ่นกว่าการสร้างคอลัมน์แยกสำหรับทุกฟิลด์
SQL
CREATE TABLE user_profiles (
user_id SERIAL PRIMARY KEY,
username VARCHAR(100) NOT NULL,
profile_data JSONB
);
INSERT INTO user_profiles (username, profile_data) VALUES (
'alice',
'{"age": 30, "city": "Bangkok", "skills": ["SQL", "JSONB"]}'
);
การ Query ข้อมูลภายใน JSONB (Operators)
จุดเด่นที่สุดของ PostgreSQL คือการที่เราสามารถใช้ Operator พิเศษในการเข้าถึงข้อมูลที่ฝังอยู่ใน JSONB ได้โดยตรง โดยมี Operator หลักที่ควรรู้คือ:
->: ใช้สำหรับดึงค่าเป็น JSONB (ยังคงเป็น Object/Array)->>: ใช้สำหรับดึงค่าเป็นข้อความ (Text) ซึ่งเหมาะกับการเปรียบเทียบหรือการใช้งานในเงื่อนไข WHERE
ตัวอย่าง: การดึงค่า ‘city’ ของผู้ใช้ทุกคน
SQL
SELECT
username,
profile_data->>"city" AS city_name
FROM
user_profiles
WHERE
profile_data->>"age"::INT > 25;
ตัวอย่าง: การอัปเดตข้อมูล (Updating JSONB)
หากต้องการเพิ่มข้อมูลใหม่ เช่น ’email’ ให้กับผู้ใช้ ‘alice’ เราสามารถใช้ jsonb_set เพื่ออัปเดตข้อมูลได้อย่างแม่นยำ:
SQL
UPDATE
user_profiles
SET
profile_data = jsonb_set(profile_data, “email”, „[email protected]„::jsonb)
WHERE
username = 'alice';
บทสรุป: การผสมผสานพลังของ SQL และ NoSQL
การใช้ JSONB ใน PostgreSQL ทำให้คุณได้ประโยชน์สูงสุดจากการผสมผสานระหว่างโลกของ Relational Database (ความน่าเชื่อถือของ Schema, ACID Compliance) และโลกของ NoSQL (ความยืดหยุ่นของโครงสร้างข้อมูล) คุณสามารถเก็บข้อมูลที่เปลี่ยนแปลงบ่อยและมีโครงสร้างไม่แน่นอนไว้ใน JSONB ได้ ขณะที่ยังคงใช้พลังของ SQL ในการทำ Transaction และการ Query ที่ซับซ้อนได้อย่างสมบูรณ์ ทำให้ PostgreSQL เป็นเครื่องมือที่ทรงพลังและครบวงจรสำหรับการพัฒนาแอปพลิเคชันยุคใหม่ที่ต้องการความยืดหยุ่นสูงครับ