| 1 | == Нормализација (верзија 1) |
| 2 | |
| 3 | === Исполнува услов за 1NF |
| 4 | |
| 5 | Сите табели имаат соодветен примарен клуч и правилно се референцирани надворешните клучеви. |
| 6 | |
| 7 | |
| 8 | === Исполнува услов за 2NF |
| 9 | |
| 10 | Нема парцијална зависност, атрибутите да зависат од дел од композитен клуч. |
| 11 | |
| 12 | |
| 13 | === Исполнува услов 3NF |
| 14 | |
| 15 | Во сите табели колоните кои немаат функција за чување на примарен клуч, не се зависни една од друга, туку од нивниот соодветен примарен клуч. Нема транзитивна зависност. |
| 16 | |
| 17 | == Нормализација (верзија 2) - определување функциски зависности и да нема нешто со исто име на атрибут |
| 18 | |
| 19 | === Функционални зависности |
| 20 | |
| 21 | account Table: |
| 22 | id → username, email, password, balance |
| 23 | |
| 24 | transaction Table: |
| 25 | id → amount, currency, type, timestamp, account_id |
| 26 | |
| 27 | transfer Table: |
| 28 | id → s_id, r_id |
| 29 | |
| 30 | deposit Table: |
| 31 | id → account_id, amount, timestamp |
| 32 | |
| 33 | withdraw Table: |
| 34 | id → account_id, amount, timestamp |
| 35 | |
| 36 | transferred_money Table: |
| 37 | id → s_account_id, r_account_id, t_id, currency |
| 38 | |
| 39 | === Boyce-Code |
| 40 | |
| 41 | '''1. account Table - (T)''' |
| 42 | |
| 43 | '''Колони:''' id, username, email, password, balance |
| 44 | |
| 45 | '''Функционални зависности:''' id → username, email, password, balance |
| 46 | |
| 47 | '''Анализа:''' id е примарниот клуч од кој зависат сите останати атрибути, па според тоа тој е и суперклучот. |
| 48 | |
| 49 | Нема функционални зависности во кои детерминантата не е суперклуч. |
| 50 | |
| 51 | '''Заклучок:''' Account табелата ја задоволува BCNF. |
| 52 | |
| 53 | |
| 54 | '''2. transaction Table - (N)''' |
| 55 | |
| 56 | '''Колони:''' id, amount, currency, type, timestamp, account_id |
| 57 | |
| 58 | '''Функционални зависности:''' |
| 59 | |
| 60 | * id → amount, currency, type, timestamp, account_id |
| 61 | |
| 62 | * account_id, timestamp → amount, currency, type |
| 63 | |
| 64 | '''Анализа:''' id е примарниот клуч и ги одредува останатите атрибути, па затоа тој е суперклуч. |
| 65 | |
| 66 | |
| 67 | account_id, timestamp → amount, currency, type е проблематична зависност. Иако account_id и timestamp можат да се идентификуваат за трансакција, тие не се супер клуч. Ова значи account_id, timestamp не е суперклуч и можат да ја прекршат BCNF. |
| 68 | |
| 69 | '''Заклучок:''' Transaction табелата не ја задоволува BCNF затоа што account_id, timestamp не прават суперклуч, но ги одредуваат другите атрибути (amount, currency, type). |
| 70 | |
| 71 | |
| 72 | '''3. transfer Table - (T)''' |
| 73 | |
| 74 | '''Колони:''' id, s_id, r_id |
| 75 | |
| 76 | '''Функционални зависности:''' id → s_id, r_id |
| 77 | |
| 78 | '''Анализа:''' id е примарен клуч и тој уникатно ги одредува s_id и r_id. |
| 79 | |
| 80 | Според тоа тој е супер клуч. |
| 81 | |
| 82 | Нема функционални зависности во кои детерминантата не е суперклуч. |
| 83 | |
| 84 | '''Заклучок:''' Transfer табелата ја задоволува BCNF. |
| 85 | |
| 86 | '''4. deposit Table - (N)''' |
| 87 | |
| 88 | '''Колони:''' id, account_id, amount, timestamp |
| 89 | |
| 90 | '''Функционални зависности:''' |
| 91 | |
| 92 | |
| 93 | * id → account_id, amount, timestamp |
| 94 | |
| 95 | * account_id, timestamp → amount |
| 96 | |
| 97 | '''Анализа:''' id e примарниот клуч кој ги одредува сите останати атрибути, според тоа тој е и суперклуч. |
| 98 | |
| 99 | |
| 100 | account_id, timestamp → amount можат да биде проблематична зависност. Ако има повеќе повлекување на пари во исто време ова ја нарушува BCNF. |
| 101 | |
| 102 | '''Заклучок:''' Deposit табелата не ја задоволува BCNF затоа што account_id, timestamp не се суперклуч, но го одредуваат amount. |
| 103 | |
| 104 | |
| 105 | |
| 106 | '''5. withdraw Table - (N)''' |
| 107 | |
| 108 | '''Колони:''' id, account_id, amount, timestamp |
| 109 | |
| 110 | '''Функционални зависности:''' |
| 111 | |
| 112 | * id → account_id, amount, timestamp |
| 113 | |
| 114 | * account_id, timestamp → amount |
| 115 | |
| 116 | '''Анализа:''' id е примарниот клуч и ги одредува останатите атрибути, па затоа тој е суперклуч. |
| 117 | |
| 118 | account_id, timestamp → amount можат да биде проблематична зависност. Ако има повеќе повлекување на пари во исто време ова ја нарушува BCNF. |
| 119 | |
| 120 | '''Заклучок:''' Withdraw табелата не ја задоволува BCNF затоа што account_id, timestamp не се суперклуч, но го одредуваат amount. |
| 121 | |
| 122 | |
| 123 | |
| 124 | '''6. transferred_money Table - (T)''' |
| 125 | |
| 126 | '''Колони:''' id, s_account_id, r_account_id, t_id, currency |
| 127 | |
| 128 | '''Функционални зависности:''' id → s_account_id, r_account_id, t_id, currency |
| 129 | |
| 130 | '''Анализа:''' |
| 131 | |
| 132 | id е примарниот клуч кој се користи и како суперклуч од кои сите други атрибути зависат. |
| 133 | |
| 134 | s_account_id, r_account_id, t_id можат да се употребат заедно како еден суперклуч, бидејќи претставуваат валидна нетривијална зависност која може да се корисни приидентификација на една редица |
| 135 | |
| 136 | '''Заклучок:''' Transferred_money табелата ја задоволува BCNF. |
| 137 | |
| 138 | === Подобрување на базата |
| 139 | |
| 140 | |
| 141 | account Table(останува иста): |
| 142 | id → username, email, password, balance |
| 143 | |
| 144 | transaction Table(останува иста): |
| 145 | id → amount, currency, type, timestamp, account_id |
| 146 | |
| 147 | transfer Table(останува иста): |
| 148 | id → s_id, r_id |
| 149 | |
| 150 | deposit Table(се менуваат атрибутите): |
| 151 | id → account_id, transaction_id, amount |
| 152 | |
| 153 | withdraw Table(се менуваат атрибутите): |
| 154 | id → account_id, transaction_id, amount |
| 155 | |
| 156 | transferred_money Table: |
| 157 | id → s_account_id, r_account_id, t_id, currency |
| 158 | |
| 159 | |
| 160 | Направив промени во deposit и withdraw табелата такашто timestamp го исфрлив, а додадов атрибут transaction_id кој се референцира кон табелата transaction. |
| 161 | Со ова се исполнуваат исте услови 1NF,2NF, 3NF и целата BCNF. На тој начин ако ги користиме account_id и transaction_id за одредување на amount атрибутот, тие два атрибута како суперклуч нема да ја нарушат Boyce-Code шемата и се избегнува дуплирање на податоците во табелите. |