= Нормализација - TradingMK = == Де-нормализирана форма на базата == === Универзална релација === Тргнуваме од една единствена универзална релација која ги содржи сите атрибути од целиот домен на апликацијата — сите табели споени во еден единствен запис. Атрибутите се преименувани каде е потребно за да нема дупликати на имиња. {{{ Universal_Relation_TradingMK( user_id, username, password, email, role, auth_provider, portfolio_id, balance, holding_id, holding_quantity, avg_price, stock_id, stock_symbol, stock_name, current_price, last_price, percentage, turnover, last_updated, history_id, history_price, history_timestamp, trade_id, trade_type, trade_status, trade_quantity, price_per_unit, trade_timestamp, trade_stock_symbol, transaction_id, txn_type, txn_quantity, txn_price, txn_timestamp, txn_origin, watchlist_id, price_above, price_below, oauth_token, oauth_email, oauth_provider, oauth_expires_at, oauth_created_at ) }}} '''Напомени за именување:''' * trade_stock_symbol е преименуван (наспроти stock_symbol) за да избегне конфликт на имиња во универзалната релација * auth_provider е атрибут кој претставува вредност од user_auth_providers - повеќевредносен по природа * Нема дупликати на имиња на атрибути во универзалната релација === Функционални зависности === Ги идентификуваме сите функционални зависности кои важат глобално во универзалната релација. '''F = {''' * '''FD1:''' user_id → username, password, email, role * '''FD2:''' username → user_id * '''FD3:''' email → user_id * '''FD4:''' portfolio_id → balance, user_id * '''FD5:''' user_id → portfolio_id * '''FD6:''' stock_id → stock_symbol, stock_name, current_price, last_price, percentage, turnover, last_updated * '''FD7:''' stock_symbol → stock_id * '''FD8:''' holding_id → holding_quantity, avg_price, portfolio_id, stock_id * '''FD9:''' history_id → history_price, history_timestamp, stock_id * '''FD10:''' trade_id → trade_type, trade_status, trade_quantity, price_per_unit, trade_timestamp, trade_stock_symbol, portfolio_id * '''FD11:''' transaction_id → txn_type, txn_quantity, txn_price, txn_timestamp, txn_origin, user_id, stock_id * '''FD12:''' watchlist_id → price_above, price_below, user_id, stock_id * '''FD13:''' oauth_token → oauth_email, oauth_provider, oauth_expires_at, oauth_created_at, user_id '''}''' === Кандидат клучеви и примарен клуч === ==== Класификација на атрибути (Лева / Десна страна) ==== ||= Атрибут =||= Лева страна =||= Десна страна =||= Класификација =|| || user_id || ✓ (FD1, FD5) || ✓ (FD2, FD3, FD4, FD11, FD12, FD13) || и лево и десно || || username || ✓ (FD2) || ✓ (FD1) || и лево и десно || || password || ✗ || ✓ (FD1) || само десно || || email || ✓ (FD3) || ✓ (FD1) || и лево и десно || || role || ✗ || ✓ (FD1) || само десно || || auth_provider || ✗ || ✗ || '''само лево''' || || portfolio_id || ✓ (FD4) || ✓ (FD5, FD8, FD10) || и лево и десно || || balance || ✗ || ✓ (FD4) || само десно || || holding_id || ✓ (FD8) || ✗ || '''само лево''' || || holding_quantity || ✗ || ✓ (FD8) || само десно || || avg_price || ✗ || ✓ (FD8) || само десно || || stock_id || ✓ (FD6) || ✓ (FD7, FD8, FD9, FD11, FD12) || и лево и десно || || stock_symbol || ✓ (FD7) || ✓ (FD6) || и лево и десно || || stock_name || ✗ || ✓ (FD6) || само десно || || current_price || ✗ || ✓ (FD6) || само десно || || last_price || ✗ || ✓ (FD6) || само десно || || percentage || ✗ || ✓ (FD6) || само десно || || turnover || ✗ || ✓ (FD6) || само десно || || last_updated || ✗ || ✓ (FD6) || само десно || || history_id || ✓ (FD9) || ✗ || '''само лево''' || || history_price || ✗ || ✓ (FD9) || само десно || || history_timestamp || ✗ || ✓ (FD9) || само десно || || trade_id || ✓ (FD10) || ✗ || '''само лево''' || || trade_type || ✗ || ✓ (FD10) || само десно || || trade_status || ✗ || ✓ (FD10) || само десно || || trade_quantity || ✗ || ✓ (FD10) || само десно || || price_per_unit || ✗ || ✓ (FD10) || само десно || || trade_timestamp || ✗ || ✓ (FD10) || само десно || || trade_stock_symbol || ✗ || ✓ (FD10) || само десно || || transaction_id || ✓ (FD11) || ✗ || '''само лево''' || || txn_type || ✗ || ✓ (FD11) || само десно || || txn_quantity || ✗ || ✓ (FD11) || само десно || || txn_price || ✗ || ✓ (FD11) || само десно || || txn_timestamp || ✗ || ✓ (FD11) || само десно || || txn_origin || ✗ || ✓ (FD11) || само десно || || watchlist_id || ✓ (FD12) || ✗ || '''само лево''' || || price_above || ✗ || ✓ (FD12) || само десно || || price_below || ✗ || ✓ (FD12) || само десно || || oauth_token || ✓ (FD13) || ✗ || '''само лево''' || || oauth_email || ✗ || ✓ (FD13) || само десно || || oauth_provider || ✗ || ✓ (FD13) || само десно || || oauth_expires_at || ✗ || ✓ (FD13) || само десно || || oauth_created_at || ✗ || ✓ (FD13) || само десно || ==== Атрибути кои се појавуваат САМО на лева страна ==== Овие атрибути мора да бидат дел од секој кандидат клуч, бидејќи не можат да се изведат од ниедна FD: * '''holding_id''' - мора да биде дел од секој кандидат клуч * '''history_id''' - мора да биде дел од секој кандидат клуч * '''trade_id''' - мора да биде дел од секој кандидат клуч * '''transaction_id''' - мора да биде дел од секој кандидат клуч * '''watchlist_id''' - мора да биде дел од секој кандидат клуч * '''oauth_token''' - мора да биде дел од секој кандидат клуч * '''auth_provider''' - мора да биде дел од секој кандидат клуч (не учествува во ниедна FD; изводливо само преку себе) ==== Пресметка на затворач ====