== Нормализација (верзија 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. === Подобрување на базата