Нормализација (верзија 1)
Исполнува услов за 1NF
Сите табели имаат соодветен примарен клуч и правилно се референцирани надворешните клучеви.
Исполнува услов за 2NF
Нема парцијална зависност, атрибутите да зависат од дел од композитен клуч.
Исполнува услов 3NF
Во сите табели колоните кои немаат функција за чување на примарен клуч, не се зависни една од друга, туку од нивниот соодветен примарен клуч. Нема транзитивна зависност.
Нормализација (верзија 2) - определување функциски зависности и да нема нешто со исто име на атрибут
Функционални зависности
account Table: id → username, email, password, balance
transaction Table: id → amount, currency, type, timestamp, account_id
transfer Table: id → s_id, r_id
deposit Table: id → account_id, amount, timestamp
withdraw Table: id → account_id, amount, timestamp
transferred_money Table: id → s_account_id, r_account_id, t_id, currency
Boyce-Code
1. account Table - (T)
Колони: id, username, email, password, balance
Функционални зависности: id → username, email, password, balance
Анализа: id е примарниот клуч од кој зависат сите останати атрибути, па според тоа тој е и суперклучот.
Нема функционални зависности во кои детерминантата не е суперклуч.
Заклучок: Account табелата ја задоволува BCNF.
2. transaction Table - (N)
Колони: id, amount, currency, type, timestamp, account_id
Функционални зависности:
- id → amount, currency, type, timestamp, account_id
- account_id, timestamp → amount, currency, type
Анализа: id е примарниот клуч и ги одредува останатите атрибути, па затоа тој е суперклуч.
account_id, timestamp → amount, currency, type е проблематична зависност. Иако account_id и timestamp можат да се идентификуваат за трансакција, тие не се супер клуч. Ова значи account_id, timestamp не е суперклуч и можат да ја прекршат BCNF.
Заклучок: Transaction табелата не ја задоволува BCNF затоа што account_id, timestamp не прават суперклуч, но ги одредуваат другите атрибути (amount, currency, type).
3. transfer Table - (T)
Колони: id, s_id, r_id
Функционални зависности: id → s_id, r_id
Анализа: id е примарен клуч и тој уникатно ги одредува s_id и r_id.
Според тоа тој е супер клуч.
Нема функционални зависности во кои детерминантата не е суперклуч.
Заклучок: Transfer табелата ја задоволува BCNF.
4. deposit Table - (N)
Колони: id, account_id, amount, timestamp
Функционални зависности:
- id → account_id, amount, timestamp
- account_id, timestamp → amount
Анализа: id e примарниот клуч кој ги одредува сите останати атрибути, според тоа тој е и суперклуч.
account_id, timestamp → amount можат да биде проблематична зависност. Ако има повеќе повлекување на пари во исто време ова ја нарушува BCNF.
Заклучок: Deposit табелата не ја задоволува BCNF затоа што account_id, timestamp не се суперклуч, но го одредуваат amount.
5. withdraw Table - (N)
Колони: id, account_id, amount, timestamp
Функционални зависности:
- id → account_id, amount, timestamp
- account_id, timestamp → amount
Анализа: id е примарниот клуч и ги одредува останатите атрибути, па затоа тој е суперклуч.
account_id, timestamp → amount можат да биде проблематична зависност. Ако има повеќе повлекување на пари во исто време ова ја нарушува BCNF.
Заклучок: Withdraw табелата не ја задоволува BCNF затоа што account_id, timestamp не се суперклуч, но го одредуваат amount.
6. transferred_money Table - (T)
Колони: id, s_account_id, r_account_id, t_id, currency
Функционални зависности: id → s_account_id, r_account_id, t_id, currency
Анализа:
id е примарниот клуч кој се користи и како суперклуч од кои сите други атрибути зависат.
s_account_id, r_account_id, t_id можат да се употребат заедно како еден суперклуч, бидејќи претставуваат валидна нетривијална зависност која може да се корисни приидентификација на една редица
Заклучок: Transferred_money табелата ја задоволува BCNF.
Подобрување на базата
account Table(останува иста): id → username, email, password, balance
transaction Table(останува иста): id → amount, currency, type, timestamp, account_id
transfer Table(останува иста): id → s_id, r_id
deposit Table(се менуваат атрибутите): id → account_id, transaction_id, amount
withdraw Table(се менуваат атрибутите): id → account_id, transaction_id, amount
transferred_money Table: id → s_account_id, r_account_id, t_id, currency
Направив промени во deposit и withdraw табелата такашто timestamp го исфрлив, а додадов атрибут transaction_id кој се референцира кон табелата transaction. Со ова се исполнуваат исте услови 1NF,2NF, 3NF и целата BCNF. На тој начин ако ги користиме account_id и transaction_id за одредување на amount атрибутот, тие два атрибута како суперклуч нема да ја нарушат Boyce-Code шемата и се избегнува дуплирање на податоците во табелите.