2.4.Chuẩn hóa
Ban đầu, tất cả các CSDL được mô tả bởi số lượng lớn các cột và bản ghi. cách tiếp cận này chắc chắn có những hạn chế. Xem xét chi tiết nhân viên (employees) trong một phòng ban sau đây. Bảng 2.3 bao gồm chi tiết nhân viên cũng giống như chi tiết các dự án họ đang làm việc.
Bảng 2.3: Chi tiết nhân viên trong phòng (Department Employee Details)
-
Sự tái diễn dị thường (Repetition anomaly)
Dữ liệu có trên trường như project_id, project_name, grade, salary lặp lại nhiều lần. Sự lặp lại này làm vướng đến 2 vấn đề, việc thi hành lấy dữ liệu và khả năng lưu trữ. Sự lặp dữ liệu này được gọi là sự tái diễn dị thường. Sự lặp lại được hiển thị trong bảng 2.4 với trợ giúp của các ô bóng mờ.
Bảng 2.4: Chi tiết nhân viên trong phòng (Department Employee Details)
Giả định thành viên mới của phòng ban là một nhân viên mới có tên Ann. Ann không được ấn định một dự án nào ngay bây giờ. Chèn chi tiết thông tin về cô ta trong bảng bị bỏ trống các ô trên cột có tên Project_id, Project_name. Việc để lại các cột trống dẫn đến một số vấn đề về sau. Sự dị thường đã tạo ra bởi thao tác chèn được gọi là sự chèn dị thường. Dị thường có thể nhìn thấy trong bảng 2.5.
Bảng 2.5: Chi tiết nhân viên trong phòng (Department Employee Details)
Giả định Bob được lấy từ dự án MAGNUM. Xóa bản ghi có tên nhân viên là Bob bao gồm mã số nhân viên (employee_number), cấp bậc (grade) và lương (salary). Việc mất dữ liệu gây tai hại đến chi tiết thông tin cá nhân của Bob, việc mất này có thể nhìn thấy trong bảng dưới đây. Dữ liệu bị mất do thao tác xóa như trên được gọi là sự xóa dị thường. Sự dị thường có thể nhìn thấy trong bảng 2.6.
Bảng 2.6 Chi tiết dự án của nhân viên (Employee Project Details)
Giả định John đã được tăng lương hoặc giảm lương. Việc thay đổi lương (salary) của John hoặc cấp bậc (grade) cần phải được phản hồi trong tất cả dự án mà John làm việc. Vấn đề này cập nhật trong tất cả như trên được gọi là sự cập nhật dị thường.
Bảng chi tiết các nhân viên trong phòng ban được gọi là bảng chưa được chuẩn hóa. Những hạn chế này cho thấy việc chuẩn hóa là cần thiết. Chuẩn hóa là tiến trình gỡ bỏ sự dư thừa và sự phụ thuộc không mong đợi.
Ban đầu, Codd (1972) đã mô tả ba dạng chuẩn (1NF, 2NF và 3NF), tất cả dựa trên sự phụ thuộc giữa các thuộc tính của quan hệ. Dạng chuẩn bốn và dạng chuẩn năm dựa trên đa trị và kết hợp phụ thuộc và các đề nghị sau này.
2.4.1.Dạng chuẩn một (First Normal Form)
Để đạt được dạng chuẩn một:
-
Tạo ra các bảng riêng biệt cho mỗi nhóm dữ liệu liên quan.
-
Các cột của bảng phải có các giá trị nguyên tố (atomic values)
-
Tất cả các thuộc tính khóa phải được nhận dạng
Xem xét bảng chi tiết các dự án của nhân viên, bảng 2.7, hiển thị dưới đây.
Bảng 2.7 Chi tiết dự án của nhân viên (Employee Project Details)
Bảng có dữ liệu liên quan tới Project và employees. Bảng cần phải chia làm hai bảng đó là bảng chi tiết dự án và bảng chi tiết nhân viên. Các cột của bảng, project_id và project_names có nhiều giá trị. Dữ liệu cần được chia ra thành các dòng khác nhau. Các bảng kết quả là chi tiết dự án (Project Details) và chi tiết nhân viên (Employee Details).
Bảng 2.8: Chi tiết dự án (Project Details)
Bảng 2.9: Chi tiết nhân viên (Employee Details).
Thuộc tính Project_id là khóa chính cho bảng chi tiết dự án. Thuộc tính employee_number là khóa chính cho bảng chi tiết nhân viên. Bởi vậy, trong dạng chuẩn một, lúc đầu bảng chi tiết dự án của nhân viên đã được biến đổi thành các bảng chi tiết nhân viên và chi tiết dự án.
Dạng chuẩn hai
Các bảng được gọi là dạng chuẩn hai nếu:
-
Chúng đã thỏa mãn các yêu cầu ở dạng chuẩn một.
-
Chúng không phụ thuộc một phần trong bảng.
-
Các bảng quan hệ thông qua các khóa ngoại.
Phụ thuộc một phần có nghĩa là một thuộc tính không phải là khóa không được phụ thuộc nhiều hơn một thuộc tính khóa. Bảng chi tiết nhân viên và chi tiết dự án không tồn tại bất kỳ phụ thuộc một phần nào. Trường project_name chỉ phụ thuộc vào project_id và employee_name, grade và salary chỉ phụ thuộc vào employee_number. Các bảng cần có mối quan hệ thông qua các khóa ngoại. Bảng thứ 3 có tên chi tiết dự án của nhân viên được tạo ra từ hai cột, project_id và employee_number.
Vì vậy, bảng chi tiết nhân viên và chi tiết dự án chuyển đổi sang dạng chuẩn hai sinh ra bảng chi tiết dự án, chi tiết nhân viên và chi tiết dự án của nhân viên.
Bảng 2.10: Chi tiết dự án (Project Details)
Bảng 2.11: Chi tiết nhân viên (Employee Details)
Bảng 2.12: Chi tiết dự án của nhân viên (Employee Project Details)
Các thuộc tính, employee_number và project_id của bảng chi tiết dự án của nhân viên được kết hợp với nhau để trở thành khóa chính. Khóa chính này được gọi là khóa chính kết hợp.
Dạng chuẩn 3
Để đạt được dạng chuẩn 3:
-
Các bảng phải thỏa mãn các yêu cầu ở dạng chuẩn hai.
-
Không tồn tại phụ thuộc bắc cầu trong bảng.
Các bảng chi tiết dự án, chi tiết nhân viên và chi tiết dự án của nhân viên ở dạng chuẩn hai. Nếu một thuộc tính có thể xác định bởi thuộc tính không khóa, nó được gọi phụ thuộc bắc cầu. Để dễ hiểu hơn, mọi thuộc tính không khóa được xác định bởi chỉ một thuộc tính khóa. Nếu một trường không phải là khóa được xác định bởi thuộc tính không khóa khác thì nó cần phải được tách ra một bảng khác.
Xem xét các bảng khác nhau, ta thấy bảng chi tiết dự án và bảng chi tiết dự án của nhân viên không tồn tại bất kỳ phụ thuộc bắc cầu nào. Tất cả các thuộc tính không khóa được xác định từ thuộc tính khóa duy nhất. Project_name chỉ được xác định bởi thuộc tính project_number. Nhưng nghiên cứu kỹ hơn bảng nhân viên thì chắc chắn có mâu thuẩn. thuộc tính salary được xác định bởi thuộc tính grade và không phải thuộc tính khóa employee_number. Vấn đề này phụ thuộc bắc cầu cần được gỡ bỏ. Bảng chi tiết nhân viên được chia thành hai bảng: chi tiết nhân viên (Employee Details) và bảng chi tiết lương dựa trên cấp bậc (Grade Salary Details).
Bảng 2.13: Employee Details
Bảng 2.14: Grade salary details table
Như vậy, kết thúc ba giai đoạn chuẩn hóa thì bảng chi tiết dự án của nhân viên ban đầu đã được tách thành các bảng chi tiết dự án (Project Details), chi tiết dự án của nhân viên ( Employee Project Details), Chi tiết nhân viên (Employee Details) và bảng chi tiết lương dựa theo cấp bậc ( Grade Salary Details).
Bảng 2.15: Bảng chi tiết dự án (Project Details)
Bảng 2.16: Bảng chi tiết nhân viên dự án (Employee Project Details)
Bảng 2.17: Bảng chi tiết nhân viên (Employee Details)
Bảng 2.18: Bnảg chi tiết mức lương (Grade Salary Details)
2.4.2.Phi chuẩn hóa (Denormalization)
Khi chuẩn hóa một CSDL, dư thừa dữ liệu được giảm xuống. Điều này là giảm đi nhu cầu lưu trữ cho CSDL và đảm bảo tính toàn vẹn dữ liệu. Nhưng chác chắn có vài điều trở ngại. Đó là:
Truy vấn kết nối phức tạp phải được thực hiện kết hợp dữ liệu trên nhiều bảng. Kết nối có thể được thực hiện trên nhiều hơn ba bảng phụ thuộc vào nhu cầu thông tin.
Nếu như kết nối được sử dụng thường xuyên, thì hiệu suất sử dụng CSDL sẽ rất thấp. Thời gian thực thi của CPU yêu cầu truy vấn sẽ rất lớn. Trong trường hợp này, lưu trữ dư thừa vài trường dữ liệu sẽ làm tăng hiệu năng sử dụng CSDL. Các CSDL chấp nhận sự dư thừa dữ liệu để tăng hiệu năng được gọi là các CSDL phi chuẩn và tiến trình của việc thực hiện này được gọi là tiến trình phi chuẩn.
Chia sẻ với bạn bè của bạn: |