Một sự phụ thuộc đầy đủ chức năng là một trạng thái bình thường hóa cơ sở dữ liệu tương đương với tiêu chuẩn chuẩn hóa của Dạng thông thường thứ hai (2NF) . Tóm lại, điều này có nghĩa là nó đáp ứng các yêu cầu của First Normal Form (1NF), và tất cả các thuộc tính không phải là chìa khóa hoàn toàn phụ thuộc vào chức năng trên khóa chính.
Đây không phải là phức tạp như nó có thể âm thanh. Hãy xem xét chi tiết hơn.
Tóm tắt biểu mẫu thông thường đầu tiên
Trước khi cơ sở dữ liệu có thể hoàn toàn phụ thuộc vào chức năng, trước tiên nó phải tuân thủ Biểu mẫu đầu tiên thông thường .
Tất cả điều này có nghĩa là mỗi thuộc tính phải chứa một giá trị nguyên tử duy nhất.
Ví dụ, bảng sau không tuân thủ 1NF, vì Tina của nhân viên được liên kết với hai vị trí, cả hai vị trí trong một ô đơn lẻ:
Nhân viên | Vị trí |
---|---|
John | Los Angeles |
Tina | Los Angeles, Chicago |
Việc cho phép thiết kế này có thể tác động tiêu cực đến các cập nhật hoặc mục nhập dữ liệu. Để đảm bảo tuân thủ 1NF, hãy sắp xếp lại bảng sao cho tất cả các thuộc tính (hoặc các ô cột) giữ một giá trị duy nhất:
Nhân viên | Vị trí |
---|---|
John | Los Angeles |
Tina | Los Angeles |
Tina | Chicago |
Nhưng 1NF vẫn không đủ để tránh các vấn đề với dữ liệu.
Cách 2NF hoạt động để đảm bảo phụ thuộc đầy đủ
Để hoàn toàn phụ thuộc, tất cả các thuộc tính khóa không phải ứng cử viên phải phụ thuộc vào khóa chính. (Hãy nhớ rằng, một thuộc tính khóa ứng viên là bất kỳ khóa nào (ví dụ, khóa chính hoặc khóa ngoài) được sử dụng để nhận dạng duy nhất một bản ghi cơ sở dữ liệu.
Các nhà thiết kế cơ sở dữ liệu sử dụng một ký pháp để mô tả các mối quan hệ phụ thuộc giữa các thuộc tính:
Nếu thuộc tính A xác định giá trị của B, ta viết A -> B - có nghĩa là B phụ thuộc vào hàm A. Trong mối quan hệ này, A xác định giá trị của B, trong khi B phụ thuộc vào A.
Ví dụ, trong bảng Employee Departments sau, EmployeeID và DeptID là cả hai khóa ứng viên: EmployeeID là khóa chính của bảng trong khi DeptID là khóa ngoài.
Bất kỳ thuộc tính nào khác - trong trường hợp này, EmployeeName và DeptName - phải phụ thuộc vào khóa chính để có được giá trị của nó.
Mã hiệu công nhân | Tên nhân viên | DeptID | DeptName |
---|---|---|---|
Emp1 | John | Dept001 | Tài chính |
Emp2 | Tina | Dept003 | Bán hàng |
Emp3 | Carlos | Dept001 | Tài chính |
Trong trường hợp này, bảng không hoàn toàn phụ thuộc vì, trong khi EmployeeName phụ thuộc vào khóa chính EmployeeID, DeptName phụ thuộc vào DeptID. Điều này được gọi là phụ thuộc một phần .
Để làm cho bảng này phù hợp với 2NF, chúng ta cần tách dữ liệu thành hai bảng:
Mã hiệu công nhân | Tên nhân viên | DeptID |
---|---|---|
Emp1 | John | Dept001 |
Emp2 | Tina | Dept003 |
Emp3 | Carlos | Dept001 |
Chúng ta loại bỏ thuộc tính DeptName khỏi bảng Employees và tạo một bảng mới.
DeptID | DeptName |
---|---|
Dept001 | Tài chính |
Dept002 | nguồn nhân lực |
Dept003 | Bán hàng |
Bây giờ các mối quan hệ giữa các bảng là hoàn toàn phụ thuộc, hoặc trong 2NF.
Tại sao phụ thuộc đầy đủ lại quan trọng
Sự phụ thuộc đầy đủ giữa các thuộc tính cơ sở dữ liệu giúp đảm bảo tính toàn vẹn dữ liệu và tránh các dị thường dữ liệu.
Ví dụ: xem xét bảng trong phần ở trên chỉ tuân thủ 1NF. Lại một lân nưa:
Nhân viên | Vị trí |
---|---|
John | Los Angeles |
Tina | Los Angeles |
Tina | Chicago |
Tina có hai hồ sơ. Nếu chúng ta cập nhật một mà không nhận ra rằng có hai, kết quả sẽ là dữ liệu không phù hợp.
Hoặc, điều gì xảy ra nếu chúng tôi muốn thêm nhân viên vào bảng này, nhưng chúng tôi chưa biết Vị trí? Chúng tôi có thể không cho phép thêm nhân viên mới nếu thuộc tính Vị trí không cho phép giá trị NULL.
Tuy nhiên, sự phụ thuộc hoàn toàn không phải là toàn bộ bức tranh khi nói đến bình thường hóa. Bạn phải chắc chắn rằng cơ sở dữ liệu của bạn ở dạng thứ ba bình thường (3NF).