Phụ thuộc đầy đủ chức năng trong chuẩn hóa cơ sở dữ liệu

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ẻ:

Hình thức đầu tiên không tuân thủ
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:

Tuân thủ Biểu mẫu Bình thường Đầu tiên
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ó.

Phòng nhân viê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:

Nhân viên
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.

Sở
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:

Tuân thủ Biểu mẫu Bình thường Đầu tiên
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).