CodeGym /Các khóa học /SQL SELF /Phân tích cơ sở dữ liệu hiện có về việc tuân thủ các dạng...

Phân tích cơ sở dữ liệu hiện có về việc tuân thủ các dạng chuẩn

SQL SELF
Mức độ , Bài học
Có sẵn

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_namesupplier_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 ProductsSuppliers, 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
  1. Kiểm tra bảng có tuân thủ các dạng chuẩn không.
  2. Đư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ế

  1. Đừ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.
  2. 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.
  3. Đừ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.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION