Phụ thuộc (Dependencies) trong DBMS là mối quan hệ giữa hai hoặc nhiều thuộc tính. Nó có các loại sau trong DBMS:
- Phụ thuộc hàm (Functional Dependency)
- Phụ thuộc hàm đầy đủ (Fully-Functional Dependency)
- Phụ thuộc bắc cầu (Transitive Dependency)
- Phụ thuộc đa trị (Multivalued Dependency)
- Phụ thuộc một phần (Partial Dependency)
Hãy bắt đầu với Phụ thuộc hàm:
Phụ thuộc hàm (Functional Dependency)
Nếu thông tin lưu trữ trong một bảng có thể xác định duy nhất thông tin khác trong cùng bảng, thì đó gọi là Phụ thuộc hàm. Coi đây như sự liên kết giữa hai thuộc tính của cùng một quan hệ.
Nếu P xác định hàm Q, thì:
| P → Q |
Ví dụ:
<Employee>
| EmpID | EmpName | EmpAge |
| E01 | Amit | 28 |
| E02 | Rohit | 31 |
Trong bảng trên, EmpName phụ thuộc hàm vào EmpID vì EmpName chỉ có thể nhận một giá trị cho một giá trị cho trước của EmpID:
| EmpID → EmpName |
Phụ thuộc hàm đầy đủ (Fully-functional Dependency)
Một thuộc tính được gọi là phụ thuộc hàm đầy đủ vào thuộc tính khác, nếu nó phụ thuộc hàm vào thuộc tính đó và không phụ thuộc vào bất kỳ tập con chính xác nào của nó.
Ví dụ, thuộc tính Q phụ thuộc hàm đầy đủ vào thuộc tính P, nếu nó phụ thuộc hàm vào P và không phụ thuộc vào bất kỳ tập con chính xác nào của P.
Ví dụ minh họa:
<ProjectCost>
| ProjectID | ProjectCost |
| 001 | 1000 |
| 002 | 5000 |
<EmployeeProject>
| EmpID | ProjectID | Days (ngày dành cho dự án) |
| E099 | 001 | 320 |
| E056 | 002 | 190 |
Các quan hệ trên cho thấy:
| EmpID, ProjectID, ProjectCost → Days |
Tuy nhiên, đây không phải là phụ thuộc hàm đầy đủ.
Trong khi tập con {EmpID, ProjectID} có thể dễ dàng xác định {Days} dành cho dự án bởi nhân viên.
Điều này tóm tắt và cho ta phụ thuộc hàm đầy đủ:
| {EmpID, ProjectID} → (Days) |
Phụ thuộc bắc cầu (Transitive Dependency)
Khi một mối quan hệ gián tiếp gây ra phụ thuộc hàm, nó được gọi là Phụ thuộc bắc cầu.
Nếu P → Q và Q → R là đúng, thì P → R là một phụ thuộc bắc cầu.
Phụ thuộc đa trị (Multivalued Dependency)
Khi sự tồn tại của một hoặc nhiều hàng trong một bảng ngụ ý một hoặc nhiều hàng khác trong cùng bảng, thì các phụ thuộc đa trị xảy ra.
Nếu một bảng có các thuộc tính P, Q và R, thì Q và R là các sự thực đa trị của P.
Được biểu diễn bằng mũi tên kép:
| →→ |
Ví dụ của chúng ta:
| P→→Q Q→→R |
Trong trường hợp trên, Phụ thuộc đa trị chỉ tồn tại nếu Q và R là các thuộc tính độc lập.
Phụ thuộc một phần (Partial Dependency)
Phụ thuộc một phần xảy ra khi một thuộc tính non-prime (không phải khóa) phụ thuộc hàm vào một phần của khóa ứng viên.
Dạng chuẩn thứ 2 (2NF) loại bỏ Phụ thuộc một phần. Ví dụ:
<StudentProject>
| StudentID | ProjectNo | StudentName | ProjectName |
| S01 | 199 | Katie | Geo Location |
| S02 | 120 | Ollie | Cluster Exploration |
Trong bảng trên, chúng ta có phụ thuộc một phần; hãy xem cách thức:
Các thuộc tính khóa chính là StudentID và ProjectNo.
Như đã nêu, các thuộc tính non-prime là StudentName và ProjectName nên phụ thuộc hàm vào một phần của khóa ứng viên, để thành Phụ thuộc một phần.
StudentName có thể được xác định bởi StudentID làm cho quan hệ thành Phụ thuộc một phần.
ProjectName có thể được xác định bởi ProjectID, điều đó làm cho quan hệ thành Phụ thuộc một phần.