DBMS - Định dạng cơ sở dữ liệu

Xin chào các bạn đam mê cơ sở dữ liệu! Hôm nay, chúng ta sẽ bắt đầu một hành trình đầy thú vị vào thế giới của Định dạng cơ sở dữ liệu. Là một giáo viên khoa học máy tính gần gũi, tôi rất vui mừng được hướng dẫn các bạn qua khái niệm quan trọng này trong thiết kế cơ sở dữ liệu. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - chúng ta sẽ bắt đầu từ cơ bản và dần dần nâng cao!

DBMS - Database Normalization

Giới thiệu về Định dạng cơ sở dữ liệu

Hãy tưởng tượng bạn đang tổ chức tủ quần áo của mình. Bạn sẽ không chỉ quăng tất cả quần áo vào một đống lớn, phải không? Tất nhiên là không! Bạn sẽ tổ chức chúng theo loại, màu sắc hoặc mùa. Định dạng cơ sở dữ liệu cũng vậy - nó là về việc tổ chức dữ liệu hiệu quả và giảm thiểu冗余.

Phụ thuộc hàm

Hãy bắt đầu với một khái niệm cơ bản: Phụ thuộc hàm.

Phụ thuộc hàm là gì?

Phụ thuộc hàm (FD) là mối quan hệ giữa hai thuộc tính trong một mối quan hệ, nơi một thuộc tính xác định thuộc tính khác.

Hãy tưởng tượng bạn có một cơ sở dữ liệu sinh viên:

Student_ID Name Age Course
101 Alice 20 Math
102 Bob 21 Physics
103 Charlie 19 Chemistry

Ở đây, Student_ID phụ thuộc hàm vào Name, Age và Course. Chúng ta viết này như sau:

Student_ID → Name, Age, Course

Điều này có nghĩa là nếu chúng ta biết Student_ID, chúng ta có thể xác định Name, Age và Course của sinh viên.

Axiom của Armstrong

Bây giờ, hãy nói về Axiom của Armstrong. Đây là các quy tắc cơ bản cho phụ thuộc hàm. Hãy tưởng tượng chúng như "luật vật lý" cho các mối quan hệ cơ sở dữ liệu!

  1. Tính phản hồi: Nếu Y là một tập con của X, thì X → Y
  2. Tính mở rộng: Nếu X → Y, thì XZ → YZ
  3. Tính truyền tải: Nếu X → Y và Y → Z, thì X → Z

Những điều này có thể听起来 phức tạp, nhưng chúng chỉ là những cách thức chính thức để mô tả các mối quan hệ logic. Chúng ta sẽ thấy cách chúng áp dụng khi chúng ta tiếp tục!

Phụ thuộc hàm không quan trọng

Một phụ thuộc hàm không quan trọng là khi một thuộc tính bên phải là một tập con của bên trái. Ví dụ:

Student_ID, Name → Student_ID

Điều này không quan trọng vì biết Student_ID và Name sẽ luôn cho bạn biết Student_ID (nó đã có ở đó rồi!).

Định dạng

Bây giờ, hãy cùng tìm hiểu trọng tâm của bài giảng của chúng ta: Định dạng. Định dạng là quá trình tổ chức dữ liệu để giảm thiểu冗余 và phụ thuộc.

Định dạng thứ nhất (1NF)

Định dạng thứ nhất là mức độ cơ bản của định dạng. Để đạt được 1NF:

  1. Loại bỏ các nhóm lặp lại
  2. Tạo một bảng riêng cho mỗi tập dữ liệu liên quan
  3. Xác định mỗi tập dữ liệu liên quan bằng một khóa chính

Hãy xem một ví dụ:

Trước 1NF:

Order_ID Product Quantity
1 Apple, Banana 2, 3
2 Orange, Grape 1, 4

Sau 1NF:

Order_ID Product Quantity
1 Apple 2
1 Banana 3
2 Orange 1
2 Grape 4

Thấy cách chúng ta đã loại bỏ các nhóm lặp lại? Đẹp hơn nhiều!

Định dạng thứ hai (2NF)

Để đạt được 2NF, chúng ta cần:

  1. Đạt được 1NF
  2. Loại bỏ các phụ thuộc một phần

Hãy xem một ví dụ:

Student_ID Course_ID Course_Name Instructor
101 C1 Math Prof. Smith
102 C2 Physics Prof. Johnson

Ở đây, Course_Name và Instructor phụ thuộc vào Course_ID, không phải vào Student_ID. Chúng ta nên chia chúng thành hai bảng:

Bảng 1: Student_Course

Student_ID Course_ID
101 C1
102 C2

Bảng 2: Course

Course_ID Course_Name Instructor
C1 Math Prof. Smith
C2 Physics Prof. Johnson

Định dạng thứ ba (3NF)

Để đạt được 3NF, chúng ta cần:

  1. Đạt được 2NF
  2. Loại bỏ các phụ thuộc truyền tải

Hãy xem một ví dụ:

Employee_ID Department Department_Head
101 Sales John
102 Marketing Sarah

Ở đây, Department_Head phụ thuộc vào Department, mà lại phụ thuộc vào Employee_ID. Chúng ta nên chia chúng:

Bảng 1: Employee

Employee_ID Department
101 Sales
102 Marketing

Bảng 2: Department

Department Department_Head
Sales John
Marketing Sarah

Định dạng Boyce-Codd (BCNF)

BCNF là một phiên bản mạnh hơn của 3NF. Để đạt được BCNF:

  1. Đạt được 3NF
  2. Đối với mỗi phụ thuộc X → Y, X nên là một khóa siêu

Dưới đây là một ví dụ:

Student Subject Professor
Alice Math Prof. Smith
Bob Physics Prof. Johnson

Trong trường hợp này, cả (Student, Subject) → Professor và Professor → Subject. Để đạt được BCNF, chúng ta chia chúng:

Bảng 1: Student_Professor

Student Professor
Alice Prof. Smith
Bob Prof. Johnson

Bảng 2: Professor_Subject

Professor Subject
Prof. Smith Math
Prof. Johnson Physics

Và thế là xong! Chúng ta đã bao gồm các khái niệm cơ bản của định dạng cơ sở dữ liệu. Nhớ rằng, mặc dù định dạng rất quan trọng, đôi khi denormalization có thể hữu ích vì lý do hiệu suất. Đó là về việc tìm kiếm sự cân bằng phù hợp cho nhu cầu cụ thể của bạn.

Tôi hy vọng hướng dẫn này đã giúp ích. Nhớ rằng, thực hành làm nên hoàn hảo! Hãy thử định dạng một số cơ sở dữ liệu mẫu của riêng bạn. Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại hỏi. Chúc các bạn thành công trong việc định dạng!

Credits: Image by storyset