wiki:Normalization

Version 2 (modified by 231020, 8 months ago) ( diff )

--

Нормализација - 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; изводливо само преку себе)

Пресметка на затворач

Note: See TracWiki for help on using the wiki.