PlusMagi's Blog By Pitt Phunsanit Backend,Database บันทึกเทพอสูร (Tales of Demon and Gods)

บันทึกเทพอสูร (Tales of Demon and Gods)

ในฐานะสถาปนิกระบบ (Senior Architect) การจัดการข้อมูลขนาดใหญ่ที่มีความสัมพันธ์ซับซ้อนและมีโครงสร้างหลากหลายอย่าง ‘บันทึกเทพอสูร’ (Tales of Demon and Gods) ต้องการเครื่องมือฐานข้อมูลที่ทรงพลังและยืดหยุ่น PostgreSQL คือคำตอบที่สมบูรณ์แบบ ด้วยความสามารถในการรองรับข้อมูลเชิงสัมพันธ์ (Relational) ผสมผสานกับความยืดหยุ่นของ NoSQL ทำให้เราสามารถสร้างระบบที่สามารถบันทึกเรื่องราว ตำนาน และความสัมพันธ์ของตัวละครได้อย่างแม่นยำและมีประสิทธิภาพ

การออกแบบสถาปัตยกรรมด้วย PostgreSQL

หัวใจสำคัญของการจัดการข้อมูลตำนานคือการสร้าง Schema ที่สามารถเชื่อมโยงเอนทิตี้ที่แตกต่างกันได้ เราจะใช้ PostgreSQL เพื่อกำหนดตารางหลัก เช่น characters, events, และ relationships โดยการใช้ Data Type ขั้นสูงอย่าง JSONB และ Array จะช่วยให้ระบบมีความยืดหยุ่นในการขยายขอบเขตของเนื้อหาตำนานโดยไม่จำเป็นต้องแก้ไข Schema หลักบ่อยครั้ง

ตัวอย่างการสร้างตารางและการจัดเก็บข้อมูล

เราจะสาธิตการสร้างตารางตัวละคร (characters) ที่มีทั้งข้อมูลพื้นฐานและข้อมูลความสามารถ (Abilities) ที่จัดเก็บแบบ JSONB เพื่อรองรับรายละเอียดที่เปลี่ยนแปลงได้:

SQL

-- สร้างตารางตัวละครหลัก (Character Schema) </code>
CREATE TABLE characters (
    character_id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    species VARCHAR(50),
    lore_details JSONB -- ใช้ JSONB สำหรับรายละเอียดที่ยืดหยุ่น
);

-- แทรกข้อมูลตัวละคร (เช่น 'เทพ' และ 'อสูร') <code>
INSERT INTO characters (name, species, lore_details) VALUES
('Aether', 'God', '{"origin": "Celestial", "powers": ["Light", "Time"]}'),
('Malakor', 'Demon', '{"origin": "Abyssal", "powers": ["Shadow", "Chaos"]}');

การสืบค้นความสัมพันธ์ที่ซับซ้อน (Advanced Querying)

ในการสืบค้นความสัมพันธ์ระหว่างตัวละคร (เช่น การต่อสู้ หรือการเป็นพันธมิตร) เราสามารถใช้ Common Table Expressions (CTEs) ร่วมกับฟังก์ชัน Array เพื่อจำลองการ Query ที่ซับซ้อนของตำนานได้:

SQL

WITH battle_history AS (
    SELECT character_id, 'Aether' AS opponent, 'Malakor' AS opponent_name
    UNION ALL
    SELECT character_id, 'Malakor' AS opponent, 'Aether' AS opponent_name
) 
SELECT * FROM battle_history WHERE character_id = 1;

บทสรุป

การใช้ PostgreSQL ในการพัฒนาระบบ ‘บันทึกเทพอสูร’ ไม่เพียงแต่ทำให้การจัดเก็บข้อมูลมีประสิทธิภาพสูงเท่านั้น แต่ยังช่วยให้สถาปนิกสามารถออกแบบระบบที่มีความยืดหยุ่นสูง (Schema-on-read) เพื่อรองรับการขยายเนื้อหาตำนานที่ไม่มีที่สิ้นสุดได้อย่างง่ายดาย ด้วยการผสานพลังของ Data Types ขั้นสูงและการ Query ที่ซับซ้อน PostgreSQL จึงเป็นรากฐานที่มั่นคงสำหรับระบบฐานข้อมูลเชิงเล่าเรื่อง (Narrative Database) ระดับโลก