Markdown คือภาษา Markup ที่ช่วยให้เราสามารถเขียนเนื้อหาที่จัดรูปแบบได้ง่าย ๆ ด้วยการใช้ข้อความธรรมดา (Plain Text) ซึ่งเป็นที่นิยมอย่างมากในการสร้างเอกสารประกอบโค้ด (เช่น README.md) อย่างไรก็ตาม เมื่อเราต้องการนำเนื้อหา Markdown เหล่านี้ไปจัดเก็บในระบบฐานข้อมูลเชิงสัมพันธ์ (Relational Database) อย่าง PostgreSQL เราจำเป็นต้องทราบวิธีการจัดการและจัดเก็บข้อมูลเหล่านี้อย่างมีประสิทธิภาพ
Markdown ในบริบทของ PostgreSQL: การจัดเก็บข้อมูล
โดยพื้นฐานแล้ว Markdown เป็นเพียงสตริงของข้อความ (String) ที่มีรูปแบบเฉพาะตัว ดังนั้นการจัดเก็บจึงทำได้ง่ายโดยใช้ประเภทข้อมูล TEXT หรือ VARCHAR ใน PostgreSQL แต่ในฐานะ Senior Architect เราไม่ควรเพียงแค่เก็บมันดิบ ๆ เท่านั้น แต่ควรพิจารณาถึงการจัดการ Metadata และการค้นหาด้วย
การออกแบบ Schema สำหรับ Markdown Content
เราควรออกแบบตารางที่ไม่ได้เก็บแค่เนื้อหาเท่านั้น แต่ยังเก็บข้อมูลเสริม (Metadata) เช่น วันที่สร้าง ผู้เขียน และสถานะการเผยแพร่ด้วย การใช้ประเภทข้อมูล TEXT สำหรับเนื้อหา Markdown เป็นมาตรฐานที่สุด
SQL
-- สร้างตารางสำหรับเก็บเนื้อหา Markdown<br>CREATE TABLE markdown_articles ( <br> article_id SERIAL PRIMARY KEY, <br> title VARCHAR(255) NOT NULL, <br> author VARCHAR(100) NOT NULL, <br> content TEXT NOT NULL, <br> created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP <br>);<br><br>-- ตัวอย่างการแทรกข้อมูล Markdown<br>INSERT INTO markdown_articles (title, author, content) VALUES ('Getting Started', 'SystemAdmin', '# Welcome to Markdown
This is a simple paragraph with **bold** text.');
การจัดการและค้นหาเนื้อหา (Advanced Querying)
แม้ว่า PostgreSQL จะไม่สามารถ ‘เรนเดอร์’ Markdown ให้เป็น HTML โดยอัตโนมัติได้ แต่เราสามารถใช้ฟังก์ชัน SQL เพื่อค้นหาหรือตรวจสอบโครงสร้างของเนื้อหา Markdown ได้ ตัวอย่างเช่น หากเราต้องการค้นหาบทความที่มีหัวข้อระดับ 1 (#) เราสามารถใช้ Regular Expressions (~) ได้
SQL
-- ค้นหาบทความที่มีการใช้หัวข้อระดับ 1 อย่างน้อย 1 ครั้ง<br>SELECT title, article_id <br>FROM markdown_articles <br>WHERE content ~ '# [A-Z]';
บทสรุปและ Best Practices
การจัดเก็บ Markdown ใน PostgreSQL นั้นง่ายและมีประสิทธิภาพด้วยประเภทข้อมูล TEXT สิ่งสำคัญคือการแยกการจัดเก็บเนื้อหาดิบ (Markdown) ออกจากการจัดการ Metadata (เช่น ชื่อเรื่อง ผู้เขียน) เพื่อให้ฐานข้อมูลมีความยืดหยุ่นในการค้นหาและจัดการข้อมูลในอนาคต หากต้องการให้ระบบสามารถแสดงผลเป็น HTML ได้จริง ควรมีการเพิ่มขั้นตอนการประมวลผล (Rendering) ในระดับแอปพลิเคชัน (Application Layer) หลังจากการดึงข้อมูลจาก PostgreSQL ออกมา