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).