wiki:WikiStart/Normalization/vtora_verzija

Version 24 (modified by 203206, 3 weeks ago) ( diff )

db3

Нормализација

Определување на функционални зависности

transaction_id = R { account_id, username, e-mail, password, balance, transaction_id, amount, type, timestamp, s_id, r_id, withdraw_id, deposit_id, transferred_id, currency }

account_id -> username, e-mail, password, balance

transaction_id -> amount, type, timestamp, account_id

withdraw_id -> account_id, amount, timestamp

deposit_id -> account_id, amount, timestamp

transferred_id -> s_id, r_id, transaction_id, currency

Лево

  • account_id
  • transaction_id
  • withdraw_id
  • deposit_id
  • transferred_id

Десно

  • username
  • e-mail
  • password
  • balance
  • amount
  • type
  • timestamp
  • currency

Двете

Во мојата шема за база нема атрибут што се јавува како примарен клуч и истовремено надворешен во некоја од табелите.

Покривачи

account_id += {username, e-mail, password, balance} не ги содржи сите атрибути

transaction_id += {amount, type, timestamp, account_id} не ги содржи сите атрибути

withdraw_id += {account_id, amount, timestamp} не ги содржи сите атрибути

deposit_id += {account_id, amount, timestamp} не ги содржи сите атрибути

transferred_id += { s_id, r_id, transaction_id, currency } не ги содржи сите атрибути

account_id, transaction_id += {username, e-mail, password, balance, amount, type, timestamp, account_id} не ги содржи сите атрибути

account_id, transaction_id, transferred_id += {username, e-mail, password, balance, amount, type, timestamp, account_id, s_id, r_id, transaction_id, currency} само оваа комбинација одговара за примарен клуч и него го избираме

Декомпозиција

Сите табели имаат соодветен примарен клуч и правилно се референцирани надворешните клучеви. Според тоа тие исполнуваат 1NF. Во сите табели колоните кои немаат функција за чување на примарен клуч, не се зависни една од друга, туку од нивниот соодветен примарен клуч. Нема транзитивна зависност, исполнуваат 3NF. Сепак некои табели не го исполнуваат 2NF

R1 {account_id, username, email, password, balance} е во BCNF

R2 {amount, type, timestamp, account_id, s_id, r_id, transaction_id, currency}

R2 не ја задоволува BNCF затоа што account_id, timestamp -> amount

R21 {s_account_id, r_account_id, t_id, currency} е во BCNF

Релации

account (останува иста) {id, username, email, password, balance}

transaction (останува иста){id, amount, currency, type, timestamp, account_id}

transfer(останува иста){ id s_id, r_id}

deposit(се менуваат атрибутите){ id, account_id, transaction_id, amount}

withdraw (се менуваат атрибутите){id, account_id, transaction_id, amount}

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

Note: See TracWiki for help on using the wiki.