ป้ายกำกับ: Recursive Cte

XAMPP (LAMPP)on linux in VM VirtualBoxXAMPP (LAMPP)on linux in VM VirtualBox

การสร้างสภาพแวดล้อมการพัฒนา (Development Environment) ที่แยกออกจากระบบหลักเป็นสิ่งสำคัญอย่างยิ่งสำหรับนักพัฒนาระบบ การใช้ Virtual Machine (VM) เช่น VirtualBox ร่วมกับชุดเครื่องมือ LAMPP/XAMPP บน Linux จึงเป็นมาตรฐานที่ช่วยให้เราสามารถจำลองเซิร์ฟเวอร์จริงได้อย่างสมบูรณ์

บทความนี้จะนำเสนอขั้นตอนการติดตั้งและตั้งค่าสภาพแวดล้อมดังกล่าว โดยเน้นการใช้งาน PostgreSQL ซึ่งเป็นระบบจัดการฐานข้อมูล (DBMS) ที่ทรงพลัง ด้วยการใช้คุณสมบัติขั้นสูงของ Postgres เพื่อให้โค้ดตัวอย่างมีความทันสมัยและตรงตามหลักวิชาชีพ

🛠️ ส่วนที่ 1: การเตรียมสภาพแวดล้อมด้วย VirtualBox และ Linux

ก่อนเริ่มต้น เราต้องมั่นใจว่าได้ติดตั้งเครื่องมือพื้นฐานครบถ้วน:

  1. Virtualization Tool: ติดตั้ง Oracle VM VirtualBox เพื่อสร้าง Guest OS
  2. Operating System: เลือกติดตั้ง Linux Distribution (เช่น Ubuntu Server หรือ Kali) ภายใน VM
  3. Stack Installation: ดาวน์โหลดและติดตั้ง XAMPP/LAMP stack เวอร์ชันที่รองรับ PostgreSQL บนระบบปฏิบัติการ Linux นั้นๆ

โดยทั่วไป การติดตั้งจะทำผ่าน Terminal และอาจต้องใช้สิทธิ์ root ในการรัน Installer:

SQL

# ตัวอย่างขั้นตอนการดาวน์โหลดและรัน installer (สมมติว่าอยู่ในเครื่อง VM)

SQL

root@kali:~# cd ~/Downloads</code>
root@kali:~/Downloads# chmod +x xampp-linux-x64-*.run</code>
root@kali:~/Downloads# ./xampp-linux-x64-*.run

⚙️ ส่วนที่ 2: การตรวจสอบและใช้งาน PostgreSQL ในสภาพแวดล้อมจำลอง

เมื่อติดตั้ง XAMPP/LAMP stack เสร็จสิ้น เราจะเข้าถึงเครื่องมือจัดการฐานข้อมูลผ่าน `htdocs` และใช้คำสั่ง SQL เพื่อทดสอบความสามารถของ PostgreSQL โดยเฉพาะคุณสมบัติขั้นสูง เช่น Recursive CTE (Common Table Expression) ซึ่งเป็นจุดเด่นของ Postgres

💡 ตัวอย่างการใช้งาน Recursive CTE ใน PostgreSQL

Recursive CTE มีประโยชน์มากในการจัดการข้อมูลที่มีโครงสร้างแบบลำดับชั้น (Hierarchical Data) เช่น โครงสร้างองค์กร หรือรายการสินค้าที่เกี่ยวข้อง การใช้ฟังก์ชันนี้แสดงให้เห็นถึงความสามารถของ Postgres ที่เหนือกว่าฐานข้อมูลทั่วไป

SQL

-- สร้างตารางจำลองโครงสร้างแผนกและผู้รายงาน

SQL

CREATE TABLE departments (</code>
  department_id SERIAL PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  reports_to INTEGER REFERENCES departments(department_id)
);

-- ใส่ข้อมูลตัวอย่าง: CEO -> VP -> Manager

SQL

INSERT INTO departments (name, reports_to) VALUES
('CEO', NULL),
('VP Marketing', 1),
('Manager A', 2);

-- ใช้ Recursive CTE เพื่อดึงโครงสร้างทั้งหมดแบบลำดับชั้น

SQL

WITH RECURSIVE org_chart AS (</code>
  SELECT department_id, name, 1 AS level FROM departments WHERE reports_to IS NULL -- Anchor Member (จุดเริ่มต้น)
UNION ALL
  SELECT d.department_id, d.name, o.level + 1 FROM departments d JOIN org_chart o ON d.reports_to = o.department_id -- Recursive Member (การวนซ้ำ)

SELECT * FROM org_chart ORDER BY level, department_id;

✅ บทสรุป: การสร้าง Dev Environment ที่สมบูรณ์

การตั้งค่า XAMPP/LAMP stack บน VirtualBox Linux ไม่เพียงแต่ช่วยให้เรามีเซิร์ฟเวอร์จำลองเท่านั้น แต่ยังเปิดโอกาสให้เราได้ฝึกฝนการใช้คุณสมบัติขั้นสูงของ PostgreSQL อย่าง Recursive CTE ซึ่งเป็นทักษะที่จำเป็นสำหรับสถาปนิกรุ่นใหม่

สภาพแวดล้อมนี้มีความเสถียร ปลอดภัย และสามารถนำไปจำลอง Production Environment ได้อย่างแม่นยำ ทำให้ผู้พัฒนามั่นใจได้ว่าโค้ดที่เขียนขึ้นจะทำงานได้อย่างถูกต้องในทุกสถานการณ์ก่อนที่จะ Deploy จริง