EP05: Workshop: ก่อสร้างและสำรวจฐานข้อมูลด้วย SQL

เครื่องมือ: DBMS (PostgreSQL/MySQL) และ Database Client (DBeaver/pgAdmin) ที่ติดตั้งไว้

(เตรียมความพร้อม)

  1. เปิดโปรแกรม Database Client และเชื่อมต่อกับ Server
  2. สร้างฐานข้อมูลใหม่ สำหรับสัปดาห์นี้โดยเฉพาะ: CREATE DATABASE 6830105000x;
  3. ให้นักศึกษาเชื่อมต่อเข้าไปในฐานข้อมูลใหม่ที่เพิ่งสร้าง
  4. เปิด E-R Diagram ของระบบบำรุงรักษาเครื่องจักรจากสัปดาห์ที่ 3 เพื่อใช้เป็นต้นแบบ

ขั้นตอนที่ 1: สร้างโครงสร้างตาราง (DDL in Action)

1. สร้างตาราง employees (พนักงาน):

SQL
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    full_name VARCHAR(150) NOT NULL,
    position VARCHAR(50)
);

2. สร้างตาราง machines (เครื่องจักร):

SQL
CREATE TABLE machines (
    machine_id INT PRIMARY KEY,
    machine_name VARCHAR(100) NOT NULL,
    model VARCHAR(100),
    location VARCHAR(50)
);

3. สร้างตาราง maintenance_tickets (บันทึกการแจ้งซ่อม):

SQL
CREATE TABLE maintenance_tickets (
    ticket_id INT PRIMARY KEY,
    report_date TIMESTAMP NOT NULL,
    problem_description TEXT,
    status VARCHAR(30),
    machine_id_fk INT,
    employee_id_fk INT,
    FOREIGN KEY (machine_id_fk) REFERENCES machines(machine_id),
    FOREIGN KEY (employee_id_fk) REFERENCES employees(employee_id)
);
  • ความสำคัญของ FOREIGN KEY เป็นการสร้าง “สะพาน” ที่บังคับว่า machine_id_fk ที่จะกรอกในตารางนี้ ต้องมีอยู่จริงในตาราง machines ก่อนเสมอ

ขั้นตอนที่ 2: เพิ่มข้อมูลตัวอย่าง (Populate Data)

ชุดคำสั่ง INSERT (จะเรียนละเอียดในสัปดาห์หน้า) ให้นักศึกษา copy ไปรันใน SQL Editor เพื่อให้ทุกคนมีข้อมูลตั้งต้นเหมือนกัน

SQL
-- เพิ่มข้อมูลพนักงาน
INSERT INTO employees VALUES (101, 'สมชาย เก่งมาก', 'ช่างซ่อมบำรุง'), (102, 'สมศรี ขยันยิ่ง', 'หัวหน้าฝ่ายผลิต');

-- เพิ่มข้อมูลเครื่องจักร
INSERT INTO machines VALUES (1, 'CNC Lathe Machine 01', 'Okuma Genos L200', 'Line A'), (2, 'Hydraulic Press 50 Ton', 'Yanmar YP500', 'Line B');

-- เพิ่มข้อมูลการแจ้งซ่อม
INSERT INTO maintenance_tickets VALUES (202401, '2025-06-25 09:30:00', 'มอเตอร์มีเสียงดังผิดปกติ', 'แจ้งซ่อม', 1, 102), (202402, '2025-06-26 11:00:00', 'ระบบไฮดรอลิกรั่ว', 'แจ้งซ่อม', 2, 102);

ขั้นตอนที่ 3: ฝึกฝนการสืบค้นข้อมูล (DQL Practice)

  • ให้นักศึกษาลองเขียนคำสั่ง SQL เพื่อหาคำตอบ
    • โจทย์ 1: “ขอดูข้อมูลทั้งหมดในตาราง machines
      • คำสั่ง: SELECT * FROM machines;
    • โจทย์ 2: “ขอดูเฉพาะ ‘ชื่อเต็ม’ และ ‘ตำแหน่ง’ ของพนักงานทุกคน”
      • คำสั่ง: SELECT full_name, position FROM employees;
    • โจทย์ 3: “ค้นหาเครื่องจักรที่อยู่ Line B
      • คำสั่ง: SELECT * FROM machines WHERE location = 'Line B';
    • โจทย์ 4: “ค้นหาการแจ้งซ่อมทั้งหมดที่เกิดกับเครื่องจักรหมายเลข 1 (machine_id_fk = 1)”
      • คำสั่ง: SELECT * FROM maintenance_tickets WHERE machine_id_fk = 1;
    • โจทย์ 5: “ค้นหาเครื่องจักรที่มีคำว่า ‘CNC’ อยู่ในชื่อ”
      • คำสั่ง: SELECT * FROM machines WHERE machine_name LIKE 'CNC%';
    • โจทย์ 6 (ท้าทาย): “ค้นหาการแจ้งซ่อมที่ถูกแจ้งโดยพนักงานรหัส 102 และมีสถานะเป็น แจ้งซ่อม
      • คำสั่ง: SELECT * FROM maintenance_tickets WHERE employee_id_fk = 102 AND status = 'แจ้งซ่อม';