I. Định nghĩa các dạng chuẩn
Ví dụ: Có quan hệ Student:
student_no name date_of_birth subject grade 960100 Smith, J 14/11/77 Databases Soft_Dev ISDE C A D 960105 White, A 10/05/75 Soft_Dev ISDE B B 960120 Moore, T 01/03/70 Databases Soft_Dev Workshop A B C 960145 Smith, J 09/01/72 Databases B 960150 Black, D 21/08/73 Databases Soft_Dev ISDE Workshop B D C B
Nhận xét
Quan hệ sinh viên trên sẽ không ở dạng chuẩn 1NF(hay gọi là dạng không chuẩn)
Ta có thể chuyển quan hệ sinh viên trên về dạng chuẩn 1NF như sau:
Hoang Thi Ha
Student
student_no name date_of_birth subject grade 960100 Smith, J 14/11/77 Databases C 960100 Smith, J 14/11/77 Soft_Dev A 960100 Smith, J 14/11/77 ISDE D 960105 White, A 10/05/75 Soft_Dev B 960105 White, A 10/05/75 ISDE B 960120 Moore, T 01/03/70 Databases A 960120 Moore, T 01/03/70 Soft_Dev B 960120 Moore, T 01/03/70 Workshop C 960145 Smith, J 09/01/72 Databases B 960150 Black, D 21/08/73 Databases B 960150 Black, D 21/08/73 Soft_Dev D 960150 Black, D 21/08/73 ISDE C 960150 Black, D 21/08/73 Workshop B
Mặc dù cách giải quyết này có cải tiến nhưng sẽ gặp phải một số vấn đề:
student_no không thể làm primary key vì bị lặp lại
Vì vậy phải tìm một khóa mới, trong trường hợp này nó phải là khóa phức- có nhiều hơn một thuộc tính. Khóa mới là student_no và subject.
Nhưng dữ liệu lại bị lặp lại nhiều, dư thừa dữ liệu ->
việc xử lý dữ liệu có thể sai sót. Mà sự dư thừa dữ liệu lại là nguyên nhân chính gây nên sự dị thường của dữ liệu mỗi khi thực hiện các thao tác chèn, xóa, và cập nhật dữ liệu.
Hoang Thi Ha
1NF
Dị thường khi thêm bộ: Ta không thể thêm một sinh viên mới vào database nếu như sinh viên đó chưa tham gia học môn nào(vì ta không thể bỏ trống trường Subject)
Dị thường khi cập nhật dữ liệu