Changes between Initial Version and Version 1 of WikiStart/Normalization/prva_verzija


Ignore:
Timestamp:
04/27/25 11:35:46 (4 weeks ago)
Author:
203206
Comment:

db3

Legend:

Unmodified
Added
Removed
Modified
  • WikiStart/Normalization/prva_verzija

    v1 v1  
     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
     21account Table:
     22id → username, email, password, balance
     23
     24transaction Table:
     25id → amount, currency, type, timestamp, account_id
     26
     27transfer Table:
     28id → s_id, r_id
     29
     30deposit Table:
     31id → account_id, amount, timestamp
     32
     33withdraw Table:
     34id → account_id, amount, timestamp
     35
     36transferred_money Table:
     37id → 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
     141account Table(останува иста):
     142id → username, email, password, balance
     143
     144transaction Table(останува иста):
     145id → amount, currency, type, timestamp, account_id
     146
     147transfer Table(останува иста):
     148id → s_id, r_id
     149
     150deposit Table(се менуваат атрибутите):
     151id → account_id, transaction_id, amount
     152
     153withdraw Table(се менуваат атрибутите):
     154id → account_id, transaction_id, amount
     155
     156transferred_money Table:
     157id → 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 шемата и се избегнува дуплирање на податоците во табелите.