Functional Dependencies — Full, Partial & Transitive
Press Next → or use ← → arrow keys
The Story — The Supermarket Barcode
In X → Y, X is the determinant and Y the dependent. The test: if any two rows share the same X but differ on Y, the dependency fails.
The Vocabulary You Need
Every FD type is defined in terms of prime vs non-prime attributes — identify them correctly first, and classification becomes automatic.
Two Example Relations
ORDER_ITEM · PK {Order_ID, Item_ID}
| Order | Item | Qty | Item_Name |
|---|---|---|---|
| O1 | P1 | 2 | Pen |
| O1 | P2 | 5 | Notebook |
| O2 | P1 | 3 | Pen |
Composite key → can host partial dependencies.
EMPLOYEE · PK {Emp_ID}
| Emp | EName | Dept | Dept_Loc |
|---|---|---|---|
| E1 | Raj | D1 | Block A |
| E2 | Sara | D2 | Block B |
| E3 | Amit | D1 | Block A |
Single key → can host transitive dependencies.
"Pen" repeats for every order of P1; "Block A" repeats for every D1 employee. Those repeats are exactly what partial and transitive dependencies cause.
Classify Any Dependency — The Flowchart
Just ask "what's on the left side?" — a whole key → full; part of a key → partial; a non-key attribute → transitive.
Full Functional Dependency ✓
A non-prime attribute depends on the entire composite key — remove any part and the determination breaks.
Order_ID alone can't fix Qty (O1 has 2 and 5). Item_ID alone can't either (P1 has 2 and 3). Only the full pair {Order_ID, Item_ID} → Qty works — exactly what 2NF wants.
Partial Functional Dependency — Breaks 2NF
A non-prime attribute depends on only part of a composite key. Only possible when the key has multiple attributes.
Item_ID → Item_Name: P1 is always "Pen" regardless of the order. Item_Name depends on half the key, so "Pen" is repeated on every matching row — a partial dependency that breaks 2NF.
Transitive Functional Dependency — Breaks 3NF
A non-prime attribute depends on another non-prime attribute through a middle step. "To find Raj's location, first find his department; the department gives the location."
Emp_ID → Dept_ID → Dept_Location. The location exists because of the department, not the employee — so "Block A" repeats for every D1 employee. A transitive dependency that breaks 3NF.
Impact on Normalization
| Dependency | Problem | Blocks |
|---|---|---|
| Full | None — desirable | — |
| Partial | Part-key data repeated | 2NF |
| Transitive | Non-key data repeated via a middle attribute | 3NF |
Quick Classification Drills
| Dependency | Type | Why | Status |
|---|---|---|---|
| {Order_ID, Item_ID} → Qty | Full | whole composite key | ✅ Healthy |
| Item_ID → Item_Name | Partial | part of composite key | Breaks 2NF |
| Emp_ID → Dept_Location | Transitive | non-key via another non-key | Breaks 3NF |
| {Emp_ID, Date} → Emp_ID | Trivial | dependent is inside determinant | Ignore |
Whole key → full · part of a key → partial · a non-key attribute → transitive · dependent already inside → trivial. One glance at the determinant usually settles it.
Full vs Partial vs Transitive
| Feature | Full | Partial | Transitive |
|---|---|---|---|
| Left side is | whole key | part of key | non-key attribute |
| Needs composite key | Yes | Yes | No |
| Goes via a middle attr | No | No | Yes |
| Desirable? | Yes | No | No |
| Blocks | — | 2NF | 3NF |
| Example | {O,Item}→Qty | Item→Item_Name | Emp→Dept_Loc |
Three Common Mistakes
A table that happens to show one name per barcode doesn't prove the FD — only the rule "a barcode always means one product" does. A single counterexample row, however, is enough to kill it.
Golden Rules of Functional Dependencies
The Foundation of Normalization
You can now read X → Y, tell prime from non-prime, and classify any dependency as full, partial or transitive — which is precisely the diagnosis normalization acts on. Next up: Normalization (1NF → 2NF → 3NF → BCNF), where partial dependencies are split out for 2NF and transitive ones for 3NF.
Read the left side: whole key is full (good), part of a key is partial (breaks 2NF), a non-key chaining to another non-key is transitive (breaks 3NF).
🔗 End of tutorial · Press ← to review, or click Restart