Day 9 - Advanced: Managing Tables & Databases

Bối cảnh: Hệ thống E-commerce (Thương mại điện tử)


1. Managing databases & tables

  • Trong hệ thống E-commerce, việc quản lý cơ sở dữ liệu và các bảng là rất quan trọng để đảm bảo dữ liệu được tổ chức và truy xuất hiệu quả.

  • Hôm nay, chúng ta sẽ học cách:

    • Tạo và xóa database.

    • Tạo, sửa đổi và xóa bảng.

    • Thêm, cập nhật và xóa dữ liệu.

    • Quản lý các ràng buộc (constraints) và khóa (keys).


2. CREATE DATABASE

  • CREATE DATABASE: Dùng để tạo một database mới.

  • Ví dụ:

      CREATE DATABASE ecommerce;
    

    Câu lệnh này sẽ tạo một database mới có tên ecommerce.


3. CREATE & DROP DATABASE

  • DROP DATABASE: Dùng để xóa một database.

  • Ví dụ:

      DROP DATABASE ecommerce;
    

    Câu lệnh này sẽ xóa database ecommerce.


4. Data Types

  • Các kiểu dữ liệu phổ biến trong SQL:

    • INTEGER: Số nguyên.

    • VARCHAR(n): Chuỗi ký tự với độ dài tối đa là n.

    • DATE: Ngày tháng.

    • DECIMAL(p, s): Số thập phân với p chữ số và s chữ số sau dấu phẩy.

    • BOOLEAN: Giá trị logic (TRUE/FALSE).

  • Ví dụ:

      CREATE TABLE products (
          product_id INTEGER PRIMARY KEY,
          product_name VARCHAR(100),
          price DECIMAL(10, 2),
          category VARCHAR(50)
      );
    

    Câu lệnh này sẽ tạo bảng products với các cột và kiểu dữ liệu tương ứng.


5. Constraints

  • Constraints: Các ràng buộc để đảm bảo tính toàn vẹn dữ liệu.

  • Các loại ràng buộc phổ biến:

    • NOT NULL: Đảm bảo cột không được để trống.

    • UNIQUE: Đảm bảo giá trị trong cột là duy nhất.

    • PRIMARY KEY: Khóa chính, đảm bảo giá trị duy nhất và không được để trống.

    • FOREIGN KEY: Khóa ngoại, liên kết giữa các bảng.

    • CHECK: Kiểm tra điều kiện cụ thể.

  • Ví dụ:

      CREATE TABLE orders (
          order_id INTEGER PRIMARY KEY,
          customer_id INTEGER,
          order_date DATE NOT NULL,
          total_amount DECIMAL(10, 2) CHECK (total_amount >= 0),
          FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
      );
    

6. Primary Key & Foreign Key

  • Primary Key (Khóa chính): Định danh duy nhất cho mỗi bản ghi trong bảng.

  • Foreign Key (Khóa ngoại): Liên kết giữa các bảng để đảm bảo tính toàn vẹn tham chiếu.

  • Ví dụ:

      CREATE TABLE customers (
          customer_id INTEGER PRIMARY KEY,
          customer_name VARCHAR(100) NOT NULL,
          email VARCHAR(100) UNIQUE
      );
    

7. CREATE TABLE

  • CREATE TABLE: Dùng để tạo một bảng mới.

  • Ví dụ:

      CREATE TABLE payments (
          payment_id INTEGER PRIMARY KEY,
          order_id INTEGER,
          payment_method VARCHAR(50),
          amount DECIMAL(10, 2),
          payment_date DATE,
          FOREIGN KEY (order_id) REFERENCES orders(order_id)
      );
    

8. INSERT

  • INSERT: Dùng để thêm dữ liệu vào bảng.

  • Ví dụ:

      INSERT INTO customers (customer_id, customer_name, email)
      VALUES (1, 'John Doe', 'john.doe@example.com');
    

9. ALTER TABLE

  • ALTER TABLE: Dùng để sửa đổi cấu trúc bảng.

  • Ví dụ:

      ALTER TABLE products ADD COLUMN description TEXT;
    

    Câu lệnh này sẽ thêm cột description vào bảng products.


10. Challenge: ALTER TABLE

  • Yêu cầu: Thêm cột discount (kiểu DECIMAL) vào bảng products.

11. Solution: ALTER TABLE

  • Giải pháp:

      ALTER TABLE products ADD COLUMN discount DECIMAL(5, 2);
    

12. TRUNCATE & DROP TABLE

  • TRUNCATE: Xóa tất cả dữ liệu trong bảng nhưng giữ nguyên cấu trúc bảng.

  • DROP TABLE: Xóa hoàn toàn bảng.

  • Ví dụ:

      TRUNCATE TABLE orders;
      DROP TABLE payments;
    

13. CHECK

  • CHECK: Ràng buộc để kiểm tra điều kiện cụ thể.

  • Ví dụ:

      CREATE TABLE products (
          product_id INTEGER PRIMARY KEY,
          product_name VARCHAR(100),
          price DECIMAL(10, 2) CHECK (price > 0)
      );
    

14. Challenge: CHECK

  • Yêu cầu: Tạo bảng orders với ràng buộc CHECK để đảm bảo total_amount không âm.

15. Solution: CHECK

  • Giải pháp:

      CREATE TABLE orders (
          order_id INTEGER PRIMARY KEY,
          customer_id INTEGER,
          order_date DATE,
          total_amount DECIMAL(10, 2) CHECK (total_amount >= 0),
          FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
      );
    

16. Today's slides

  • Tổng kết lại các kiến thức về quản lý bảng và cơ sở dữ liệu.

  • Cung cấp slide tham khảo để bạn ôn tập và thực hành thêm.


17. Today's summary

  • Hôm nay, bạn đã học:

    • Cách tạo và xóa database.

    • Cách tạo, sửa đổi và xóa bảng.

    • Cách thêm, cập nhật và xóa dữ liệu.

    • Cách quản lý các ràng buộc và khóa.

  • Hẹn gặp lại bạn vào ngày 10 với chủ đề Advanced: Views & Data Manipulation!


18. Today's challenges

  • Thử thách 1: Tạo bảng reviews với các cột: review_id (khóa chính), product_id (khóa ngoại), customer_id (khóa ngoại), rating (kiểu INTEGER, giá trị từ 1 đến 5), và review_date (kiểu DATE).

  • Thử thách 2: Thêm cột discount_percentage (kiểu DECIMAL) vào bảng products.

  • Thử thách 3: Tạo bảng shipments với các cột: shipment_id (khóa chính), order_id (khóa ngoại), shipment_date (kiểu DATE), và status (kiểu VARCHAR).