Changes between Version 11 and Version 12 of WikiStart/Normalization


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

mk1

Legend:

Unmodified
Added
Removed
Modified
  • WikiStart/Normalization

    v11 v12  
    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 шемата и се избегнува дуплирање на податоците во табелите.
     1* [wiki:Normalization/prva_verzija верзија 1]
    1622
    1633
     
    1655
    1666
     7
     8