A is part of some candidate key. The others are non-prime.
Y is fully dependent on a key when it depends on the whole key, and on no smaller part of it. Otherwise the dependency is partial.
assignment
| project_id | emp_id | hours | project_name | emp_name |
|---|---|---|---|---|
| P1 | 4 | 12 | Billing | Mo Ali |
| P1 | 7 | 30 | Billing | Kim Ode |
| P2 | 4 | 8 | Search | Mo Ali |
(project_id, emp_id) → hours full
project_id → project_name partial
emp_id → emp_name partialA table is in (2NF) when it is in 1NF and no non-prime attribute is partially dependent on a candidate key.
Partial dependencies cause the anomalies of the Anomalies lesson: the project name repeats once per employee on the project.
The fix
Move each partial dependency to its own table, keyed by the part of the key it depends on:
The new tables keep the key columns, so a join gives back the original rows. No fact is lost, and each project name is stored once.