Tìm hiểu về chuẩn hóa cơ sở dữ liệu

Chuẩn hóa trong DBMS

Chuẩn hóa cơ sở dữ liệu là một kỹ thuật giúp thiết kế lược đồ của cơ sở dữ liệu một cách tối ưu để đảm bảo các điểm trên. Ý tưởng cốt lõi của việc chuẩn hóa cơ sở dữ liệu là chia các bảng thành các phần con nhỏ hơn và lưu trữ các con trỏ vào dữ liệu thay vì sao chép nó

Các loại chuẩn hóa dữ liệu:

Có nhiều dạng chuẩn hóa cơ sở dữ liệu khác nhau. Mỗi hình thức này có tầm quan trọng trong việc giúp tối ưu cơ sở dữ liệu để lưu trữ và giảm dư thừa dữ liệu

Dạng chuẩn hóa 1 (1NF)

Dạng chuẩn hóa 1 chỉ đơn giản nói rằng mỗi ô của một bảng phải chứa duy nhất một giá trị.

Chúng ta hãy lấy một ví dụ. Giả sử chúng ta đang lưu trữ các khóa học mà một người hướng dẫn cụ thể thực hiện, chúng ta có thể lưu trữ như sau:

Instructor’s nameCourse code
Prof. George(CS101, CS154)
Prof. Atkins(CS152)

Vấn đề là ở hàng đầu tiên, chúng ta đang lưu trữ 2 khóa học của giáo sư George. Đây không phải là cách tối ưu từ khi cơ sở dữ liệu SQL được thiết kế để sử dụng. Một cách tốt hơn để lưu trữ các khóa học riêng biệt:

Instructor’s nameCourse code
Prof. GeorgeCS101
Prof. GeorgeCS154
Prof. AtkinsCS152

Bằng cách này, nếu chúng ta muốn chỉnh sửa một số thông tin liên quan đến CS101, chúng ta sẽ không phải động vào dữ liệu tương ứng với CS154. Ngoài ra, hãy quan sát rằng mỗi hàng lưu trữ chỉ 1 thông tin duy nhất. Không có sự lặp lại dữ liệu. Đây là dạng chuẩn hóa 1.

Dạng chuẩn hóa 2 (2NF)

Đối với mỗi bảng ở dạng chuẩn 2, cần đáp ứng 2 điều kiện sau:

  • Bảng phải thỏa mãn chuẩn 1 (1NF).
  • Khóa chính của bảng tương ứng với một cột trong bảng.

Điều đầu tiên rõ ràng là đơn giản vì chúng ta vừa nghiên cứu 1NF ở trên. Chúng ta hãy tìm hiểu điểm đầu tiên – cột khóa chính. Vâng, khóa chính là tập hợp các cột xác định tính duy nhất cho một hàng. Về cơ bản, không có 2 hàng có cùng một khóa chính. Hãy cùng xem ví dụ:

Course codeCourse venueInstructor NameInstructor’s phone number
CS101Lecture Hall 20Prof. George+1 6514821924
CS152Lecture Hall 21Prof. Atkins+1 6519272918
CS154CS AuditoriumProf. George+1 6514821924

Trong bảng này, mã khóa học là duy nhất. Vì vậy, nó trở thành khóa chính của chúng ta. Chúng ta hãy lấy một ví dụ khác về lưu trữ các khóa học của các học sinh. Mỗi sinh viên có thể nằm trong nhiều khóa học. Hãy cùng xem bảng dưới đây:

Student nameCourse code
RahulCS152
RajatCS101
RahulCS154
RamanCS101

Cột đầu tiên lưu tên học sinh và cột thứ 2 là khóa học mà sinh viên tham gia. Rõ ràng, cột tên sinh viên không phải là duy nhất vì chúng ta có thể thấy rằng có 2 hàng tương ứng với tên “Rahul” trong hàng 1 và hàng 3. Tương tự, cột mã khóa học không phải là duy nhất vì chúng ta có thể thấy rằng có 2 hàng tương ứng với mã khóa học CS101 là hàng 2 và hàng 4. Tuy nhiên, nếu cặp (tên sinh viên, mã khóa học) thì lại là duy nhất vì sinh viên không thể đăng ký học cùng một khóa học nhiều lần. Vì vậy, 2 cột này khi kết hợp lại thì tạo thành khóa chính cho cơ sở dữ liệu.

Theo định nghĩa của dạng chuẩn hóa 2, bảng đăng ký ở trên không ở dạng chuẩn 2. Để đạt được điều này, chúng ta có thể chia nó thành 2 bảng:

Students:

Student nameEnrolment number
Rahul1
Rajat2
Raman3

Với bảng này, cột thứ 2 là duy nhất và cho biết chỉ số của khóa học mà học sinh tham gia. Rõ ràng, chỉ số của khóa học là duy nhất. Bây giờ, chúng ta có thể đính kèm từng chỉ số của khóa học với mã khóa học.

Courses:

Course codeEnrolment number
CS1012
CS1013
CS1521
CS1541

Sự kết hợp của hai bảng này cùng cung cấp cho chúng ta thông tin chính xác giống như bảng ban đầu.

Dạng chuẩn hóa 3 (3NF)

Trước khi tìm hiểu dạng chuẩn hóa 3, hãy cùng tìm hiểu khái niệm về sự phụ thuộc chức năng trên một bảng nhé.

Cột A được cho là phụ thuộc vào chức năng trên cột B, nếu thay đổi giá trị của A có thể yêu cầu thay đổi giá trị của B. Hãy cùng xem ví dụ:

Course codeCourse venueInstructor’s nameDepartment
MA214Lecture Hall 18Prof. GeorgeCS Department
ME112Auditorium buildingProf. JohnElectronics Department

Trong bảng trên, cột bộ phận (Department) phụ thuộc vào cột tên giáo sư (Instructor’s name). Điều này là do nếu trong một hàng cụ thể, chúng ta thay đổi tên của giáo sư (Instructor’s name), chúng ta cũng sẽ phải thay đổi giá trị của bộ phần (Department). Ví dụ: giả sử MA214 hiện đang được thực hiện bởi Giáo sư Ronald, người đến từ khoa Toán học, bảng sẽ trông như thế này:

Course codeCourse venueInstructor’s nameDepartment
MA214Lecture Hall 18Prof. RonaldMathematics Department
ME112Auditorium buildingProf. JohnElectronics Department

Ở đây, khi chúng a đổi tên giáo sư, chúng ta cũng phải thay đổi giá trị của cột Department. Điều này là không mong muốn nếu ai đó đang cập nhật cơ sở dữ liệu có thể nhớ thay thế tên của giáo sử, nhưng có thể quên cập nhật giá trị của Department. Điều này có thể gây ra mâu thuẫn trong cơ sở dữ liệu.

Dạng chuẩn hóa 3 sẽ giúp chúng ta tránh được điều này bằng cách chia nhỏ thành các bảng riêng biệt:

Course codeCourse venueInstructor’s ID
MA214Lecture Hall 181
ME112Auditorium building2

Trong bảng trên, cột thứ 3 là cột ID của giáo sư đứng giảng các khóa học tương ứng.

Instructor’s IDInstructor’s NameDepartment
1Prof. RonaldMathematics Department
2Prof. JohnElectronics Department

Ở đây, chúng ta lưu trữ các thông tin chi tiết của các giáo sư với ID tương ứng. Bằng cách này, bất cứ khi nào chúng ta muốn tìm các giáo sư đang dạy ở khóa nào, chúng ta sẽ không cần phải lấy ra các thông tin khác của giáo sư trên bảng một lần nữa. Chúng ta chỉ cần sử dụng Instructor’s ID.

Vì vậy, với dạng chuẩn hóa 3 (3NF), các điều kiện sau cần được thỏa mãn:

  • Bảng dữ liệu phải thỏa mãn chuẩn 2.
  • Không có bất kỳ sự phụ thuộc bắc cầu nào.

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar

Facebook