| | 11 | Во денормализираната табела постојат следниве основни функционални зависности: |
| | 12 | |
| | 13 | - {user_id} → {user_name, email, password} |
| | 14 | - {transaction_account_id} → {account_name, balance, user_id} |
| | 15 | - {transaction_id} → {transaction_name, amount, net_amount, date} |
| | 16 | - {transaction_breakdown_id} → {transaction_id, transaction_account_id, spent_amount, earned_amount} |
| | 17 | - {tag_id} → {tag_name} |
| | 33 | ==== Избор на примарен клуч во 1NF |
| | 34 | |
| | 35 | Во првата нормална форма е дефиниран композитен примарен клуч: |
| | 36 | //(user_id, transaction_id, transaction_account_id, transaction_breakdown_id)// |
| | 37 | |
| | 38 | Овој клуч е избран бидејќи eдинствено го идентификува секој ред, ги опфаќа сите повторувачки групи од денормализираната форма и не постои подмножество од овој клуч кое може самостојно да го идентификува редот. |
| | 39 | |
| | 40 | === Премин од 1NF во 2NF |
| | 41 | Проблем се делумните зависности, во 1NF постојат атрибути кои зависат само од дел од примарниот клуч, на пример: |
| | 42 | - {user_id} → {user_name, email, password} |
| | 43 | - {transaction_id} → {transaction_name, amount, net_amount, date} |
| | 44 | |
| | 45 | Ова претставува кршење на втората нормална форма, решение за тоа е декомпозиција, односно секоја група на атрибути која зависи од дел од композитниот клуч се издвојува во посебна табела каде тој дел станува примарен клуч. Пример: |
| | 46 | - USER(user_id PK, user_name, email, password) |
| | 97 | === Премин од 2NF во 3NF |
| | 98 | Проблем се транзитивните зависности, кои во 2NF сè уште постојат, на пример: |
| | 99 | - {transaction_id} → {tag_id} → {tag_name} |
| | 100 | - {transaction_account_id} → {user_id} → {user_name, email} |
| | 101 | |
| | 102 | Ова значи дека некои атрибути кои не се клучеви зависат од други атрибути кои исто така не се клучеви, што ја крши 3NF. |
| | 103 | |
| | 104 | Решение за ова е отстранување на транзитивноста, односно секој атрибут кој не зависи директно од примарниот клуч се издвојува во нова табела. Пример: |
| | 105 | - TAG(tag_id PK, tag_name) |
| | 106 | - TAG_ASSIGNED_TO_TRANSACTION(transaction_id PK, tag_id PK) |