wiki:normalization

Version 2 (modified by 231020, 27 hours 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.