Bài 1: Giới thiệu về Trình quản lý quảng cáo

Thực hành: Quản lý đơn hàng của cửa hàng bán lẻ

Bảng dữ liệu ban đầu (chưa chuẩn hóa - UNF)

Giả sử ta có bảng lưu thông tin đơn hàng như sau:

Mã đơn hàng Ngày đặt Mã khách Tên khách Địa chỉ Mã SP Tên SP Số lượng Đơn giá Tổng tiền
DH001 01/08 KH001 Nguyễn A Hà Nội SP001 Laptop Dell 1 15,000 15,000
DH001 01/08 KH001 Nguyễn A Hà Nội SP002 Chuột Logitech 2 500 1,000
DH002 02/08 KH002 Trần B TP.HCM SP001 Laptop Dell 1 15,000 15,000
DH002 02/08 KH002 Trần B TP.HCM SP003 Bàn phím cơ 1 1,500 1,500
DH003 03/08 KH003 Hoàng C Đà Nẵng SP004 iPhone 13 1 20,000 20,000

📌 Vấn đề:

  • Lặp dữ liệu khách hàng: Nếu khách hàng đặt nhiều sản phẩm trong một đơn, thông tin khách bị lặp.
  • Lặp dữ liệu sản phẩm: Mỗi đơn hàng có nhiều sản phẩm, nhưng phải ghi lại tên SP, đơn giá nhiều lần.
  • Dễ gây lỗi cập nhật: Nếu khách thay đổi địa chỉ, phải sửa nhiều dòng.

1️⃣ Chuẩn hóa về dạng 1NF (Loại bỏ lặp trong cùng ô)

Bảng không có chứa dữ liệu lặp trong 1 ô => Đã đạt chuẩn 1NF

2️⃣ Chuẩn hóa về 2NF (Loại bỏ phụ thuộc không khóa)

Hiện tại, mỗi đơn hàng có thể chứa nhiều sản phẩm, gây trùng lặp. Chúng ta tách bảng thành:

Bảng KhachHang (Thông tin khách hàng)

Mã khách Tên khách Địa chỉ
KH001 Nguyễn A Hà Nội
KH002 Trần B TP.HCM
KH003 Hoàng C Đà Nẵng

Bảng SanPham (Thông tin sản phẩm)

Mã SP Tên SP Đơn giá
SP001 Laptop Dell 15,000
SP002 Chuột Logitech 500
SP003 Bàn phím cơ 1,500
SP004 iPhone 13 20,000

Bảng DonHang (Thông tin đơn hàng)

Mã đơn hàng Ngày đặt Mã khách
DH001 01/08 KH001
DH002 02/08 KH002
DH003 03/08 KH003

Bảng ChiTietDonHang (Chi tiết sản phẩm của đơn hàng)

Mã đơn hàng Mã SP Số lượng Thành tiền
DH001 SP001 1 15,000
DH001 SP002 2 1,000
DH002 SP001 1 15,000
DH002 SP003 1 1,500
DH003 SP004 1 20,000
  • Trong bảng ChiTietDonHang, giá của sản phẩm phụ thuộc vào Mã SP, không phụ thuộc vào Mã đơn hàng.
  • Chuyển Đơn giá sang bảng SanPham, tránh dư thừa.

3️⃣ Chuẩn hóa về 3NF (Loại bỏ phụ thuộc bắc cầu)

  • Nếu có bảng lưu Nhà cung cấp, thì thông tin nhà cung cấp không nên nằm trong SanPham, mà tách thành bảng riêng.
  • Bảng SanPham chỉ chứa Mã NCC làm khóa ngoại, tránh phụ thuộc bắc cầu.

✅ Kết quả cuối cùng (Chuẩn hóa 3NF)

Bảng KhachHang

Mã khách Tên khách Địa chỉ
KH001 Nguyễn A Hà Nội
KH002 Trần B TP.HCM
KH003 Hoàng C Đà Nẵng

Bảng SanPham

Mã SP Tên SP Đơn giá Mã NCC
SP001 Laptop Dell 15,000 NCC01
SP002 Chuột Logitech 500 NCC02
SP003 Bàn phím cơ 1,500 NCC02
SP004 iPhone 13 20,000 NCC03

Bảng NhaCungCap

Mã NCC Tên NCC Địa chỉ
NCC01 Dell VN Hà Nội
NCC02 Logitech TP.HCM
NCC03 Apple VN Đà Nẵng

Bảng DonHang

Mã đơn hàng Ngày đặt Mã khách
DH001 01/08 KH001
DH002 02/08 KH002
DH003 03/08 KH003

Bảng ChiTietDonHang

Mã đơn hàng Mã SP Số lượng Thành tiền
DH001 SP001 1 15,000
DH001 SP002 2 1,000
DH002 SP001 1 15,000
DH002 SP003 1 1,500
DH003 SP004 1 20,000

🎯 Kết quả đạt được:

✅ Không còn trùng lặp thông tin khách hàng, sản phẩm.
✅ Dễ dàng cập nhật dữ liệu mà không ảnh hưởng đến các bảng khác.
✅ Đảm bảo tính toàn vẹn và tối ưu hiệu suất khi truy vấn dữ liệu.

Bài tập thực hành: Quản lý phòng khám tư nhân

Một phòng khám tư nhân muốn tổ chức dữ liệu bệnh nhân, bác sĩ và lịch khám bệnh sao cho tối ưu, tránh trùng lặp thông tin và dễ dàng truy vấn.

1. Dữ liệu ban đầu (chưa chuẩn hóa - UNF)

Mã phiếu khám Ngày khám Mã bệnh nhân Tên bệnh nhân Địa chỉ Mã bác sĩ Tên bác sĩ Chuyên khoa Bệnh chẩn đoán Mã thuốc Tên thuốc Liều lượng Đơn giá Tổng tiền
PK001 05/08 BN001 Trần Văn A Hà Nội BS001 Nguyễn Văn B Nội khoa Cảm cúm TH001 Paracetamol 2 viên/ngày 5,000 10,000
PK001 05/08 BN001 Trần Văn A Hà Nội BS001 Nguyễn Văn B Nội khoa Cảm cúm TH002 Vitamin C 1 viên/ngày 3,000 3,000
PK002 06/08 BN002 Lê Thị C TP.HCM BS002 Phạm Thị D Da liễu Dị ứng da TH003 Loratadine 1 viên/ngày 7,000 7,000
PK003 07/08 BN003 Nguyễn Văn E Đà Nẵng BS001 Nguyễn Văn B Nội khoa Viêm họng TH001 Paracetamol 2 viên/ngày 5,000 10,000

2. Yêu cầu chuẩn hóa dữ liệu

  • Xác định vấn đề trùng lặp dữ liệu.
  • Xác định khóa chính (PK) và khóa ngoại (FK) phù hợp.
  • Phân tách dữ liệu thành các bảng chuẩn hóa (tối thiểu chuẩn 3NF).

3. Nộp bài bằng cách soạn trực tiếp hoặc file word