The Story Behind Functional Dependencies
Inside a database, that promise is a functional dependency. If a value of X always pins down a value of Y, we say X → Y ("X determines Y"). Some of these dependencies are healthy; others quietly cause redundancy. This tutorial sorts them into the three types that decide a table's design quality: full, partial, and transitive.
In X → Y, X is the determinant and Y the dependent. The test is simple: if two rows ever share the same X but differ on Y, the dependency does not hold.
The Vocabulary You Need
Three quick terms unlock every definition that follows.
How to Classify Any Dependency
Faced with a dependency X → Y, ask four questions in order. The animated flowchart leads you straight to its type.
Four yes/no questions classify every non-trivial dependency — full and trivial are healthy; partial and transitive signal redundancy.
Two Tables We'll Use
One relation has a composite key (for full and partial), the other a single key (for transitive).
| ORDER_ITEM — primary key = {Order_ID, Item_ID} | ||||
|---|---|---|---|---|
| Order_ID | Item_ID | Qty | Item_Name | Order_Date |
| O1 | P1 | 2 | Pen | 2026-01-10 |
| O1 | P2 | 5 | Notebook | 2026-01-10 |
| O2 | P1 | 3 | Pen | 2026-02-05 |
| EMPLOYEE — primary key = Emp_ID | |||
|---|---|---|---|
| Emp_ID | EName | Dept_ID | Dept_Location |
| E1 | Raj | D1 | Block A |
| E2 | Sara | D2 | Block B |
| E3 | Amit | D1 | Block A |
Full Functional Dependency
A full functional dependency means a non-prime attribute depends on the entire composite key — drop any part of the key and the determination fails.
Order O1 alone can't fix Qty (it has 2 and 5). Item P1 alone can't either (2 and 3). Only the pair determines Qty.
Non-prime attributes should depend on the whole key. {Order_ID, Item_ID} → Qty is exactly what 2NF wants to see.
Partial Functional Dependency
A partial functional dependency means a non-prime attribute depends on only part of a composite key. It is only possible when the key has more than one attribute.
Item_ID P1 is always "Pen", regardless of the order. Item_Name is fixed by half the key — that is a partial dependency.
Both Item_ID → Item_Name and Order_ID → Order_Date are partial, so "Pen" and the order date get repeated on every matching row. The table is not in 2NF until these are split out.
If the primary key is a single attribute, there is no "part" to depend on — partial dependency is impossible, so the table is always at least in 2NF.
Transitive Functional Dependency
A non-key attribute (Dept_Location) depends on another non-key attribute (Dept_ID) — the hallmark of a transitive dependency.
Because Dept_Location is duplicated for every employee in the same department, the EMPLOYEE table is not in 3NF. (A transitive dependency needs at least three attributes.)
Why They Matter — The Impact on Normalization
Full dependencies are fine; partial dependencies stop a table reaching 2NF; transitive dependencies stop it reaching 3NF.
| Dependency | Problem | Fix to reach |
|---|---|---|
| Full | None — desirable | already fine |
| Partial | Part-key data repeated | 2NF |
| Transitive | Non-key data repeated via a middle attribute | 3NF |
Quick Classification Drills
Ask "what is on the left?" A whole key → full; part of a key → partial; a non-key attribute → transitive. That single glance settles most cases.
Full vs Partial vs Transitive — Side by Side
| Feature | Full | Partial | Transitive |
|---|---|---|---|
| Left side is | whole key | part of key | non-key attribute |
| Needs composite key | Yes | Yes | No |
| Goes through a middle attr | No | No | Yes |
| Desirable? | Yes | No | No |
| Blocks | — | 2NF | 3NF |
| Example | {Order_ID,Item_ID}→Qty | Item_ID→Item_Name | Emp_ID→Dept_Location |
Common Mistakes to Avoid
Partial dependency requires a composite key. A single-attribute key has no "part" to depend on, so it is automatically 2NF.
Transitive means non-key → non-key. If the middle attribute is itself a candidate key, it is not the 3NF-breaking kind.
Sample rows can disprove a dependency but never prove one. FDs come from the real-world rules of the data, not a snapshot.