| 671 | | === Normalization history |
| 672 | | |
| 673 | | * **v01** — First complete normalization analysis. Started from a single |
| 674 | | 68-attribute relation reconstructed from the P1 model rather than from the P2 |
| 675 | | tables. |
| 676 | | * **2NF decomposition** — Applied canonical-cover synthesis to separate the ten |
| 677 | | independent entity/relationship clusters. |
| 678 | | * **3NF verification** — Checked foreign-key-induced transitive dependencies and |
| 679 | | confirmed that none remains inside an individual relation. |
| 680 | | * **BCNF verification** — Checked every determinant and established that each is |
| 681 | | a candidate key of its relation. |
| 682 | | * **Final result** — The independently derived schema matches P2 relation for |
| 683 | | relation, including candidate keys and foreign keys. The only documented |
| 684 | | denormalisation remains the stored `holdings.avg_price`. |
| 685 | | |
| 686 | | The formal normalization analysis therefore validates the existing relational |
| 687 | | design rather than requiring a new one. |