Changes between Version 8 and Version 9 of Normalization


Ignore:
Timestamp:
12/25/25 02:20:51 (9 days ago)
Author:
211101
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Normalization

    v8 v9  
    99|| 2|| anita || anita@fein.com || $2y$10$CsSsqA.FFhBR/TWCZCUWYOPxYA.HmGb7ULQPgJGhv3vQS2xRqluYm || 1 || debit card || 3200 || 1 || nail polish || -200 || -200 || 19:31:32 Sep 12 2025 || 1 || -200 || 0 || 1 || beauty ||
    1010
     11Во денормализираната табела постојат следниве основни функционални зависности:
     12
     13- {user_id} → {user_name, email, password}
     14- {transaction_account_id} → {account_name, balance, user_id}
     15- {transaction_id} → {transaction_name, amount, net_amount, date}
     16- {transaction_breakdown_id} → {transaction_id, transaction_account_id, spent_amount, earned_amount}
     17- {tag_id} → {tag_name}
    1118
    1219== Прва нормална форма
     
    2431|| 2|| anita || anita@fein.com || $2y$10$CsSsqA.FFhBR/TWCZCUWYOPxYA.HmGb7ULQPgJGhv3vQS2xRqluYm || 3|| debit card || 3200|| 3|| nail polish || -200|| -200|| 19:31:32 Sep 12 2025 || 3|| -200|| 0|| 3|| beauty ||
    2532
     33==== Избор на примарен клуч во 1NF
     34
     35Во првата нормална форма е дефиниран композитен примарен клуч:
     36//(user_id, transaction_id, transaction_account_id, transaction_breakdown_id)//
     37
     38Овој клуч е избран бидејќи eдинствено го идентификува секој ред, ги опфаќа сите повторувачки групи од денормализираната форма и не постои подмножество од овој клуч кое може самостојно да го идентификува редот.
     39
     40=== Премин од 1NF во 2NF
     41Проблем се делумните зависности, во 1NF постојат атрибути кои зависат само од дел од примарниот клуч, на пример:
     42- {user_id} → {user_name, email, password}
     43- {transaction_id} → {transaction_name, amount, net_amount, date}
     44
     45Ова претставува кршење на втората нормална форма, решение за тоа е декомпозиција, односно секоја група на атрибути која зависи од дел од композитниот клуч се издвојува во посебна табела каде тој дел станува примарен клуч. Пример:
     46- USER(user_id PK, user_name, email, password)
    2647
    2748== Втора нормална форма
     
    7495|| 3 || 3 || 3 || -200 || 0 ||
    7596
     97=== Премин од 2NF во 3NF
     98Проблем се транзитивните зависности, кои во 2NF сè уште постојат, на пример:
     99- {transaction_id} → {tag_id} → {tag_name}
     100- {transaction_account_id} → {user_id} → {user_name, email}
     101
     102Ова значи дека некои атрибути кои не се клучеви зависат од други атрибути кои исто така не се клучеви, што ја крши 3NF.
     103
     104Решение за ова е отстранување на транзитивноста, односно секој атрибут кој не зависи директно од примарниот клуч се издвојува во нова табела. Пример:
     105- TAG(tag_id PK, tag_name)
     106- TAG_ASSIGNED_TO_TRANSACTION(transaction_id PK, tag_id PK)
    76107
    77108== Трета нормална форма
     
    140171|| 3 || 3 ||
    141172
     173==== Избор на примарни клучеви во 3NF
     174По правилото дека секој примарен клуч мора минимално и единствено да го идентификува редот.
     175Примери:
     176- USER.user_id — природен идентификатор
     177- TRANSACTION.transaction_id — сурогатен клуч
     178- TAG_ASSIGNED_TO_TRANSACTION(transaction_id, tag_id) — композитен клуч за M:N релација
     179- TRANSACTION_BREAKDOWN.transaction_breakdown_id — сурогатен клуч
     180
    142181==== Третата нормална форма погоре исто така е и BCNF
    143182