Changes between Version 2 and Version 3 of normalization


Ignore:
Timestamp:
02/27/26 04:42:12 (24 hours ago)
Author:
231020
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • normalization

    v2 v3  
    112112==== Пресметка на затворач ====
    113113
     114''Чекор 1:''' Започнуваме со задолжителни:
     115
     116{{{
     117{holding_id, history_id, trade_id, transaction_id, watchlist_id, oauth_token, auth_provider}:
     118
     119- Од FD8  (holding_id →):      holding_quantity, avg_price, portfolio_id, stock_id
     120- Од FD9  (history_id →):      history_price, history_timestamp, stock_id
     121- Од FD10 (trade_id →):        trade_type, trade_status, trade_quantity, price_per_unit,
     122                                trade_timestamp, trade_stock_symbol, portfolio_id
     123- Од FD11 (transaction_id →):  txn_type, txn_quantity, txn_price, txn_timestamp, txn_origin,
     124                                user_id, stock_id
     125- Од FD12 (watchlist_id →):    price_above, price_below, user_id, stock_id
     126- Од FD13 (oauth_token →):     oauth_email, oauth_provider, oauth_expires_at, oauth_created_at, user_id
     127- Од FD4  (portfolio_id →):    balance, user_id
     128- Од FD5  (user_id →):         portfolio_id
     129- Од FD1  (user_id →):         username, password, email, role
     130- Од FD6  (stock_id →):        stock_symbol, stock_name, current_price, last_price,
     131                                percentage, turnover, last_updated
     132- Од FD7  (stock_symbol →):    stock_id
     133- Од FD2  (username →):        user_id
     134- Од FD3  (email →):           user_id
     135}}}
     136
     137{{{
     138{holding_id, history_id, trade_id, transaction_id, watchlist_id, oauth_token, auth_provider}
     139  = Universal_Relation_TradingMK ✓  (сите атрибути се изводливи)
     140}}}
     141
     142==== Проверка за минималност ====
     143
     144
     145||= Подмножество (отстранет атрибут) =||= Недостасуваат атрибути =||= Суперклуч? =||
     146|| без holding_id || holding_quantity, avg_price || ✗ НЕ ||
     147|| без history_id || history_price, history_timestamp || ✗ НЕ ||
     148|| без trade_id || trade_type, trade_status, trade_quantity, price_per_unit, trade_timestamp, trade_stock_symbol || ✗ НЕ ||
     149|| без transaction_id || txn_type, txn_quantity, txn_price, txn_timestamp, txn_origin || ✗ НЕ ||
     150|| без watchlist_id || price_above, price_below || ✗ НЕ ||
     151|| без oauth_token || oauth_email, oauth_expires_at, oauth_created_at || ✗ НЕ ||
     152|| без auth_provider || auth_provider не е изводливо || ✗ НЕ ||
     153
     154Секој атрибут е неопходен - множеството е минимално.
     155
     156==== Избор на примарен клуч ====
     157
     158''Кандидат клуч (и избран примарен клуч):'''
     159
     160{{{
     161PK = {holding_id, history_id, trade_id, transaction_id, watchlist_id, oauth_token, auth_provider}
     162}}}
     163
     164'''Образложение:''' Примарниот клуч е голем бидејќи универзалната релација содржи повеќе независни ентитети (корисници, портфолија, акции, трговски барања, трансакции, watchlist записи, OAuth токени, auth провајдери) кои не се директно поврзани преку функционални зависности. Секој независен ентитет бара барем еден идентификатор во клучот. Клучот е минимален - отстранувањето на кој било атрибут го прави невозможно изведувањето на дел од атрибутите.
     165
     166==== Нормална форма пред декомпозиција ====
     167
     168Universal_Relation_TradingMK е во '''1NF''' (сите атрибути се атомарни, со исклучок на auth_provider кој е мулти-вредносен). Релацијата '''НЕ е во 2NF''' поради следните парцијални зависности - секој идентификатор ги определува само своите атрибути, независно од останатиот примарен клуч:
     169
     170 * FD8:  holding_id → holding_quantity, avg_price, portfolio_id, stock_id
     171 * FD9:  history_id → history_price, history_timestamp, stock_id
     172 * FD10: trade_id → trade_type, trade_status, ..., portfolio_id
     173 * FD11: transaction_id → txn_type, ..., user_id, stock_id
     174 * FD12: watchlist_id → price_above, price_below, user_id, stock_id
     175 * FD13: oauth_token → oauth_email, oauth_provider, oauth_expires_at, oauth_created_at, user_id
     176
     177----
     178
     179== 1NF Декомпозиција ==
     180
     181=== Анализа ===
     182
     183'''Анализирана релација:''' Universal_Relation_TradingMK
     184
     185'''Функционални зависности:''' FD1 - FD13 (сите)
     186
     187'''Кандидат клуч / Примарен клуч:''' {holding_id, history_id, trade_id, transaction_id, watchlist_id, oauth_token, auth_provider}
     188
     189'''Нормална форма:''' Релацијата е делумно во 1NF - атрибутот '''auth_provider''' претставува повеќевредносен (multi-valued) атрибут. Еден корисник може да има повеќе auth провајдери (интерен, Google), па оваа вредност не може да биде атомарна во унификованата релација.
     190
     191'''Зависност која го предизвикува проблемот:''' auth_provider е неделива повторувачка вредност поврзана со user_id - нема функционална зависност од единечен детерминант, туку претставува множество вредности.
     192
     193=== Декомпозиција - Извлекување на auth_provider ===