Skip to content

Latest commit

 

History

History

Database-System-1

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.md

COM 1602 Database System 1

Type Tech

"Data is the new oil. SQL is the refinery."


🎯 เกี่ยวกับรายวิชา

รายวิชานี้สอนการจัดการข้อมูลอย่างเป็นระบบ ผ่าน ฐานข้อมูลเชิงสัมพันธ์ (Relational Database) และภาษา SQL ซึ่งเป็นพื้นฐานสำคัญของทุกระบบงานในยุคดิจิทัล

ทำไมต้องเรียนฐานข้อมูล?

แอปพลิเคชันทุกตัวต้องจัดเก็บข้อมูล:

  • Facebook: โพสต์, เพื่อน, รูปภาพหมื่นล้านรายการ
  • ธนาคาร: บัญชี, ธุรกรรม, ยอดเงิน
  • E-Commerce: สินค้า, คำสั่งซื้อ, ลูกค้า

ถ้าไม่มีฐานข้อมูล:

  • ❌ ข้อมูลสูญหาย (File หาย)
  • ❌ ข้อมูลซ้ำซ้อน (Copy ไฟล์หลายที่)
  • ❌ ข้อมูลไม่สอดคล้อง (แก้ที่หนึ่ง อีกที่ไม่เปลี่ยน)

ใช้ฐานข้อมูล:

  • ✅ ข้อมูลปลอดภัย (Backup, Recovery)
  • ✅ ข้อมูลไม่ซ้ำ (Normalization)
  • ✅ ค้นหาเร็ว (Indexing)
  • ✅ หลายคนใช้พร้อมกันได้ (Concurrency)

เนื้อหาหลักที่เรียน

  1. Database Concepts - ER Diagram, Normalization
  2. SQL Basics - SELECT, INSERT, UPDATE, DELETE
  3. Table Design - Primary Key, Foreign Key
  4. Relationships - One-to-Many, Many-to-Many
  5. Joins - INNER JOIN, LEFT JOIN
  6. Advanced SQL - Subqueries, Aggregations, Views

🔑 สิ่งที่เรียนรู้ (Key Learnings)

1. Database Design Fundamentals

ER Diagram (Entity-Relationship)

แผนภาพแสดงความสัมพันธ์ระหว่างตาราง

ตัวอย่าง: ระบบห้องสมุด

[Book] ----< [Borrow] >---- [Member]
   |                            |
ISBN, Title              MemberID, Name

Normalization (ลดความซ้ำซ้อน)

  • 1NF: ไม่มีข้อมูลซ้อนกันในช่องเดียว
  • 2NF: แยกข้อมูลที่ไม่ขึ้นกับ Primary Key ออก
  • 3NF: แยกข้อมูลที่ขึ้นกับฟิลด์อื่นที่ไม่ใช่ Key

Primary Key & Foreign Key

-- Primary Key: unique identifier
CREATE TABLE students (
    student_id INT PRIMARY KEY,
    name VARCHAR(100)
);

-- Foreign Key: reference ไปตารางอื่น
CREATE TABLE enrollments (
    id INT PRIMARY KEY,
    student_id INT,
    FOREIGN KEY (student_id) REFERENCES students(student_id)
);

2. SQL - Structured Query Language

Data Definition Language (DDL)

สร้างและแก้ไขโครงสร้าง

-- สร้างตาราง
CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    price DECIMAL(10,2),
    stock INT
);

-- แก้ไขตาราง
ALTER TABLE products ADD COLUMN category VARCHAR(50);

-- ลบตาราง
DROP TABLE products;

Data Manipulation Language (DML)

จัดการข้อมูล (CRUD)

-- INSERT (Create)
INSERT INTO products (name, price, stock) 
VALUES ('Laptop', 25000, 10);

-- SELECT (Read)
SELECT * FROM products WHERE price > 10000;

-- UPDATE
UPDATE products SET price = 24000 WHERE id = 1;

-- DELETE
DELETE FROM products WHERE stock = 0;

3. WHERE Clause - การกรองข้อมูล

-- เงื่อนไขเดียว
SELECT * FROM products WHERE price > 10000;

-- หลายเงื่อนไข (AND)
SELECT * FROM products WHERE price > 5000 AND stock > 0;

-- OR
SELECT * FROM products WHERE category = 'Electronics' OR category = 'Computers';

-- LIKE (ค้นหาแบบคล้ายๆ)
SELECT * FROM products WHERE name LIKE '%Laptop%';

-- IN
SELECT * FROM products WHERE category IN ('Electronics', 'Computers');

-- BETWEEN
SELECT * FROM products WHERE price BETWEEN 10000 AND 50000;

4. Joins - เชื่อมตาราง

INNER JOIN (แสดงเฉพาะข้อมูลที่มีทั้ง 2 ตาราง)

SELECT orders.id, customers.name, orders.total
FROM orders
INNER JOIN customers ON orders.customer_id = customers.id;

LEFT JOIN (แสดงข้อมูลฝั่งซ้ายทั้งหมด)

SELECT customers.name, orders.total
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id;
-- ลูกค้าที่ไม่เคยสั่งจะแสดง total เป็น NULL

5. Aggregate Functions - คำนวณสรุป

-- นับจำนวน
SELECT COUNT(*) FROM products;

-- หาผลรวม
SELECT SUM(price) FROM products;

-- หาค่าเฉลี่ย
SELECT AVG(price) FROM products;

-- หาค่าสูงสุด/ต่ำสุด
SELECT MAX(price), MIN(price) FROM products;

-- จัดกลุ่ม (GROUP BY)
SELECT category, COUNT(*), AVG(price)
FROM products
GROUP BY category;

-- กรองกลุ่ม (HAVING)
SELECT category, COUNT(*) as count
FROM products
GROUP BY category
HAVING count > 5;

6. Advanced Concepts

Subquery (Query ซ้อน Query)

SELECT name FROM products
WHERE price > (SELECT AVG(price) FROM products);

View (Table เสมือน)

CREATE VIEW expensive_products AS
SELECT * FROM products WHERE price > 20000;

SELECT * FROM expensive_products;

📂 โครงสร้างภายใน (Repository Structure)

Database-System-1/
├── README.md                ← ไฟล์นี้
└── lab/                     ← Lab SQL Scripts
    ├── [Lab 1-12]           → SQL Queries, Database Design
    └── [Schema Files]       → .sql files

📚 Lab SQL Scripts

วิชานี้มี Lab SQL Scripts ที่ฝึกทั้ง DDL และ DML รายสัปดาห์:

SQL Practice Files

พื้นฐาน SQL - การเริ่มต้น

  • CREATE DATABASE และ CREATE TABLE
  • INSERT ข้อมูลพื้นฐาน
  • SELECT แบบง่าย

WHERE และ Operators

  • การกรองข้อมูลด้วย WHERE
  • Comparison Operators (=, <, >, BETWEEN)
  • LIKE สำหรับค้นหา Pattern

Aggregate Functions

  • COUNT, SUM, AVG, MAX, MIN
  • GROUP BY และ HAVING
  • สถิติพื้นฐาน

Joins - เชื่อมตาราง

  • INNER JOIN
  • LEFT JOIN และ RIGHT JOIN
  • Multiple Table Joins

Advanced Queries

  • Subqueries (Query ซ้อน Query)
  • UNION และ INTERSECT
  • Complex Data Retrieval

Main Schema - ฐานข้อมูลหลัก

  • โครงสร้างฐานข้อมูลที่สมบูรณ์
  • Sample Data สำหรับฝึกหัด

วิธีใช้งาน: เปิดไฟล์ .sql ด้วย MySQL Workbench หรือรันผ่าน Command Line: mysql -u root -p < filename.sql


🛠️ เครื่องมือที่ใช้

✅ Required

  • MySQL - Database Server
  • MySQL Workbench - GUI Tool
    • หรือใช้ phpMyAdmin (มากับ XAMPP)

📦 Alternative Tools

  • PostgreSQL: ฐานข้อมูลทางเลือก
  • DB Browser for SQLite: สำหรับ SQLite
  • DBeaver: Universal Database Tool

🚀 วิธีการรัน (How to Run)

📋 Prerequisites

  1. ติดตั้ง MySQL:

    • Download จาก mysql.com
    • หรือติดตั้ง XAMPP (มี MySQL มาด้วย)
  2. เปิด MySQL Server:

    • XAMPP: Start MySQL
    • Standalone: mysql.server start

▶️ รัน SQL Script

วิธีที่ 1: MySQL Command Line

mysql -u root -p
> CREATE DATABASE mydb;
> USE mydb;
> SOURCE schema.sql;

วิธีที่ 2: MySQL Workbench

  1. เปิด MySQL Workbench
  2. Connect to Server
  3. File → Open SQL Script
  4. Execute (⚡)

วิธีที่ 3: phpMyAdmin

  1. เปิด http://localhost/phpmyadmin
  2. สร้าง Database ใหม่
  3. Import ไฟล์ .sql

📖 แนะนำสำหรับรุ่นน้อง

🎓 เริ่มต้นอย่างไร?

  1. เข้าใจ Concept ก่อน: ER Diagram, Normalization สำคัญมาก
  2. ฝึก SQL ทุกวัน: SQL ต้องพิมพ์เอง จะจำได้
  3. วาด ER Diagram: จะทำให้เห็นภาพชัดเจน
  4. ทำโปรเจกต์จริง: ออกแบบ Database ของระบบที่สนใจ

💡 Tips & Best Practices

  • ตั้งชื่อตารางเป็นพหูพจน์: users ไม่ใช่ user
  • ใช้ Primary Key เสมอ: ทุกตารางต้องมี
  • Foreign Key บังคับ Relationship: ป้องกันข้อมูลผิดพลาด
  • Backup ข้อมูลบ่อยๆ: mysqldump หรือ Export
  • ใช้ Transaction: สำหรับงานที่ต้องทำหลายขั้นตอน

📚 แหล่งเรียนรู้เพิ่มเติม

⚠️ ข้อผิดพลาดที่พบบ่อย

  • ❌ ลืม WHERE ใน UPDATE/DELETE (แก้/ลบทั้งตาราง!)
  • ❌ ใช้ SELECT * (ช้า, ควรระบุฟิลด์)
  • ❌ ไม่ได้ normalize (ข้อมูลซ้ำซ้อน)
  • ❌ ลืม ; ท้าย SQL Statement
  • ❌ Case-sensitive ใน Linux (ตารางต้องเป็นตัวเล็ก)

📄 License

โค้ดในโปรเจกต์นี้เป็นส่วนหนึ่งของการเรียนการสอนในรายวิชา COM 1602 Database System 1


Happy Querying! 🗄️💾

"In SQL we trust, all others bring data."