Version 24 (modified by 3 weeks ago) ( diff ) | ,
---|
Нормализација
Определување на функционални зависности
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
- 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 шемата и се избегнува дуплирање на податоците во табелите.