wiki:WikiStart/Normalization

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

Last modified 2 days ago Last modified on 04/01/25 15:22:08
Note: See TracWiki for help on using the wiki.