1NF là dạng cơ bản nhất của các dạng thông thường - mỗi ô trong một bảng chỉ chứa một phần thông tin và không thể có các hàng trùng lặp.
2NF và 3NF đều phụ thuộc vào khóa chính. Hãy nhớ rằng một khóa chính có thể được tạo thành từ nhiều cột. Như Chris đã nói trong câu trả lời của mình:
Dữ liệu phụ thuộc vào khóa [1NF], toàn bộ khóa [2NF] và không có gì ngoài khóa [3NF] (vì vậy hãy giúp tôi Codd ).
2NF
Giả sử bạn có một bảng chứa các khóa học được thực hiện trong một học kỳ nhất định và bạn có dữ liệu sau:
|-----Primary Key----| uh oh |
V
CourseID | SemesterID | #Places | Course Name |
------------------------------------------------|
IT101 | 2009-1 | 100 | Programming |
IT101 | 2009-2 | 100 | Programming |
IT102 | 2009-1 | 200 | Databases |
IT102 | 2010-1 | 150 | Databases |
IT103 | 2009-2 | 120 | Web Design |
Đây không phải là trong 2NF , vì cột thứ tư không phụ thuộc vào toàn bộ khóa - mà chỉ là một phần của nó. Tên khóa học phụ thuộc vào ID của Khóa học, nhưng không liên quan gì đến học kỳ đó. Vì vậy, như bạn có thể thấy, chúng tôi có thông tin trùng lặp - một số hàng cho chúng tôi biết IT101 đang lập trình và IT102 là Cơ sở dữ liệu. Vì vậy, chúng tôi khắc phục điều đó bằng cách di chuyển tên khóa học vào một bảng khác, trong đó CourseID là khóa ENTIRE.
Primary Key |
CourseID | Course Name |
---------------------------|
IT101 | Programming |
IT102 | Databases |
IT103 | Web Design |
Không dư thừa!
3NF
Được rồi, vì vậy hãy nói rằng chúng tôi cũng thêm tên của giáo viên của khóa học và một số chi tiết về họ, vào RDBMS:
|-----Primary Key----| uh oh |
V
Course | Semester | #Places | TeacherID | TeacherName |
---------------------------------------------------------------|
IT101 | 2009-1 | 100 | 332 | Mr Jones |
IT101 | 2009-2 | 100 | 332 | Mr Jones |
IT102 | 2009-1 | 200 | 495 | Mr Bentley |
IT102 | 2010-1 | 150 | 332 | Mr Jones |
IT103 | 2009-2 | 120 | 242 | Mrs Smith |
Bây giờ, hy vọng rằng rõ ràng là Tên giáo viên phụ thuộc vào teacherID - vì vậy đây không phải là 3NF . Để khắc phục điều này, chúng tôi thực hiện nhiều thao tác giống như chúng tôi đã làm trong 2NF - lấy trường teacherName ra khỏi bảng này và đặt nó vào chính nó, trong đó có teacherID làm khóa.
Primary Key |
TeacherID | TeacherName |
---------------------------|
332 | Mr Jones |
495 | Mr Bentley |
242 | Mrs Smith |
Không dư thừa !!
Một điều quan trọng cần nhớ là nếu một cái gì đó không có trong 1NF, thì nó cũng không nằm trong 2NF hoặc 3NF. Vì vậy, mỗi Biểu mẫu Bình thường bổ sung yêu cầu mọi thứ mà các biểu mẫu bình thường thấp hơn có, cộng với một số điều kiện bổ sung, tất cả phải được đáp ứng.