Khi tụi mình nói về việc phân tích cơ sở dữ liệu xem có tuân thủ các dạng chuẩn không, ý là mình sẽ xem xét cấu trúc bảng, mối quan hệ giữa các bảng và sự phụ thuộc giữa các thuộc tính. Mục tiêu chính của việc phân tích — tìm ra các vi phạm chuẩn hóa và đánh giá ảnh hưởng của chúng đến hiệu suất, tính toàn vẹn và sự tiện lợi khi thao tác với dữ liệu.
Nói đơn giản, nó giống như kiểm toán kế toán: bạn kiểm tra để tiền không bị để lung tung mà phải được phân bổ đúng vào các khoản chi tiêu cần thiết.
Cách tiếp cận thực tế để phân tích cơ sở dữ liệu
Trong bất kỳ cơ sở dữ liệu nào, tụi mình bắt đầu bằng ba câu hỏi cơ bản, tương ứng với ba dạng chuẩn đầu tiên.
Giả sử tụi mình có một cơ sở dữ liệu kho hàng với bảng có cấu trúc như sau:
| product_id | product_name | supplier_name | supplier_phone | stock_quantity |
|---|---|---|---|---|
| 1 | Đinh | StroyKomplekt | +12301112233 | 150 |
| 2 | Vít | KrepyoshPro | +12306667788 | 200 |
| 3 | Đai ốc | StroyKomplekt | +12301112233 | 100 |
Làm sao kiểm tra bảng này có tuân thủ các dạng chuẩn không?
Nhắc lại, bảng ở 1NF nếu:
- Mỗi ô chỉ chứa một giá trị duy nhất.
- Không có các cột lặp lại cho cùng một loại dữ liệu.
Trong ví dụ này không có vi phạm 1NF: mỗi ô chứa giá trị nguyên tử. Nghĩa là bảng đã ở 1NF rồi. Tuyệt! Tiếp tục nào.
Bảng ở 2NF nếu:
- Nó đã ở 1NF.
- Tất cả thuộc tính không phải khóa chỉ phụ thuộc duy nhất vào toàn bộ khóa chính (không phải một phần của nó).
Trong bảng này tụi mình thấy supplier_name và supplier_phone chỉ phụ thuộc vào product_id — khóa chính. Tuy nhiên, có sự lặp dữ liệu: cùng một nhà cung cấp, tên và số điện thoại bị lưu nhiều dòng.
Để đưa bảng về 2NF, tụi mình có thể tách nó thành hai bảng:
Bảng Products:
| product_id | product_name | supplier_id | stock_quantity |
|---|---|---|---|
| 1 | Đinh | 1 | 150 |
| 2 | Vít | 2 | 200 |
| 3 | Đai ốc | 1 | 100 |
Bảng Suppliers:
| supplier_id | supplier_name | supplier_phone |
|---|---|---|
| 1 | StroyKomplekt | +78901112233 |
| 2 | KrepyoshPro | +78906667788 |
Bây giờ mỗi nhà cung cấp chỉ xuất hiện một lần, và liên kết giữa các bảng được thực hiện qua khóa ngoại supplier_id.
Bảng ở 3NF nếu:
- Nó đã ở 2NF.
- Tất cả thuộc tính không phải khóa chỉ phụ thuộc duy nhất vào khóa chính, không phụ thuộc vào các thuộc tính không phải khóa khác.
Với các bảng đã chuẩn hóa Products và Suppliers, tụi mình không thấy phụ thuộc bắc cầu nào cả. Nghĩa là các bảng đã ở 3NF.
Bài tập thực tế
Giả sử tụi mình có bảng gốc "Trường đại học"
| student_id | student_name | course_name | professor_name | professor_email |
|---|---|---|---|---|
| 101 | Otto Lin | Toán học | Peter Pen | pen@university.com |
| 102 | Anna Song | Vật lý | Alex Sid | sid@university.com |
| 103 | Otto Lin | Vật lý | Alex Sid | sid@university.com |
- Kiểm tra bảng có tuân thủ các dạng chuẩn không.
- Đưa nó về 1NF, 2NF và 3NF nếu cần thiết.
Giải pháp
BƯỚC 1: Kiểm tra 1NF
Bảng đã ở 1NF: mỗi ô chỉ chứa một giá trị.
BƯỚC 2: Kiểm tra 2NF
Bảng vi phạm 2NF: thông tin về giảng viên (tên và email) bị lặp lại. Tụi mình có thể tách nó ra thành bảng riêng:
Bảng Students:
| student_id | student_name |
|---|---|
| 101 | Otto Lin |
| 102 | Anna Song |
Bảng Courses:
| course_id | course_name | professor_id |
|---|---|---|
| 1 | Toán học | 1 |
| 2 | Vật lý | 2 |
Bảng Professors:
| professor_id | professor_name | professor_email |
|---|---|---|
| 1 | Peter Pen | pen@university.com |
| 2 | Alex Sid | sid@university.com |
Bảng Enrollments:
| enrollment_id | student_id | course_id |
|---|---|---|
| 1 | 101 | 1 |
| 2 | 102 | 2 |
| 3 | 103 | 2 |
BƯỚC 3: Kiểm tra 3NF
Trong cấu trúc mới không có phụ thuộc bắc cầu. Các bảng đã tuân thủ 3NF.
Mẹo thực tế
- Đừng cố hoàn hảo nếu không cần thiết. Đôi khi chuẩn hóa quá mức làm truy vấn phức tạp hơn.
- Hãy phân tích như một thám tử. Tìm các bản ghi trùng, phụ thuộc thừa và các "bất thường" khác.
- Đừng quên hiệu suất. Chuẩn hóa là cân bằng giữa dữ liệu sạch và tốc độ xử lý.
Bây giờ, khi bạn đã biết cách tìm và xử lý vấn đề trong cơ sở dữ liệu, bạn hoàn toàn có thể tự tin "kiểm toán" bất kỳ cơ sở dữ liệu nào. Nhớ nhé: một cơ sở dữ liệu tốt không chỉ là một dự án hoạt động mà còn phải đẹp (chuẩn hóa) nữa.
GO TO FULL VERSION