Changes between Initial Version and Version 1 of Normalization


Ignore:
Timestamp:
09/23/25 09:41:18 (3 months ago)
Author:
211101
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Normalization

    v1 v1  
     1= Нормализација
     2
     3Ја дизајнирав базата на податоци со surrogate примарни клучеви(system-generated identifier) со една атрибутна колона (на пр. {{{user_id}}}, {{{transaction_id }}}) за едноставност и конзистентност. Вака, секој атрибут кој што не е клуч, директно зависи од примарниот клуч, што значи дека шемата ги исполнува 1NF, 2NF и 3NF/BCNF.
     4
     5Единствената намерна редундантност е колоната {{{net_amount}}} во {{{TRANSACTION}}}. Ја вклучив затоа што овозможува побрзи пребарувања и извештаи, иако е изведлива од {{{TRANSACTION_BREAKDOWN}}}. Ова беше свесен компромис заради перформанси.
     6
     7Кај many-to-many табелите ({{{TRANSACTION_BREAKDOWN}}} и {{{TAG_ASSIGNED_TO_TRANSACTION}}}) користам surrogate клучеви заради конзистентност на целата шема иако композитни клучеви би биле построго нормализирано решение, surrogate пристапот обезбедува унифицирана структура и јасност.
     8
     9=== Анализа по Табела
     10==== 1. USER
     11
     12USER (**__user_id__**, **user_name**, **email**, **password**)
     13
     14{{{user_id → user_name, email, password}}}
     15
     16- 1NF: Сите атрибути се атомски, нема повторувачки групи.
     17- 2NF: Сите табели имаат едноатрибутни surrogate примарни клучеви → нема делумни зависности.
     18- 3NF/BCNF: Сите атрибути кои не се клучеви зависат само од примарниот клуч.
     19Додадов UNIQUE ограничување на email затоа што е природен идентификатор.
     20
     21==== 2. TRANSACTION_ACCOUNT
     22
     23TRANSACTION_ACCOUNT (__**transaction_account_id**__, account_name, balance, user_id* (USER))
     24
     25{{{transaction_account_id → account_name, balance, user_id}}}
     26
     27- 1NF: Сите атрибути се атомски, нема повторувачки групи.
     28- 2NF: Сите табели имаат едноатрибутни surrogate примарни клучеви → нема делумни зависности.
     29- 3NF/BCNF: Сите атрибути кои не се клучеви зависат само од примарниот клуч.
     30Додадов UNIQUE (user_id, account_name).
     31
     32==== 3. TRANSACTION
     33
     34TRANSACTION (__**transaction_id__**, transaction_name, **amount**, net_amount, **date**)
     35
     36{{{transaction_id → transaction_name, amount, net_amount, date}}}
     37
     38Атрибутот {{{net_amount}}} може да се изведе од {{{TRANSACTION_BREAKDOWN}}}. Го задржав намерно заради перформанси, за да избегнам постојано пресметување. За да нема неконзистентност, ќе се одржува преку triggers и апликациска логика.
     39- 1NF: Сите атрибути се атомски, нема повторувачки групи.
     40- 2NF: Сите табели имаат едноатрибутни surrogate примарни клучеви → нема делумни зависности.
     41- 3NF/BCNF: Сите атрибути кои не се клучеви зависат само од примарниот клуч, со свесен компромис.
     42
     43==== 4. TRANSACTION_BREAKDOWN
     44
     45TRANSACTION_BREAKDOWN (__**transaction_breakdown_id__**, transaction_id* (TRANSACTION), transaction_account_id* (TRANSACTION_ACCOUNT), spent_amount, earned_amount)
     46
     47{{{transaction_breakdown_id → transaction_id, transaction_account_id, spent_amount, earned_amount}}}
     48
     49- 1NF: Сите атрибути се атомски, нема повторувачки групи.
     50- 2NF: Сите табели имаат едноатрибутни surrogate примарни клучеви → нема делумни зависности.
     51- 3NF/BCNF: Сите атрибути кои не се клучеви зависат само од примарниот клуч.
     52Го задржав surrogate примарниот клуч за унифициран пристап, но додадов UNIQUE(transaction_id, transaction_account_id) за да гарантирам дека секоја сметка се појавува само еднаш по трансакциско разложување.
     53
     54==== 5. TAG
     55
     56TAG (__**tag_id__**, **tag_name**)
     57
     58{{{tag_id → tag_name}}}
     59
     60tag_name → tag_id бидејќи имињата на тагови се уникатни.
     61
     62- 1NF: Сите атрибути се атомски, нема повторувачки групи.
     63- 2NF: Сите табели имаат едноатрибутни surrogate примарни клучеви → нема делумни зависности.
     64- 3NF/BCNF: Сите атрибути кои не се клучеви зависат само од примарниот клуч.
     65Го дефинирав UNIQUE (tag_name) за да обезбедам интегритет.
     66
     67==== 6. TAG_ASSIGNED_TO_TRANSACTION
     68
     69TAG_ASSIGNED_TO_TRANSACTION(__**tag_assigned_to_transaction_id**__, **tag_id*** (TAG), **transaction_id*** (TRANSACTION))
     70
     71{{{tag_assigned_to_transaction_id → tag_id, transaction_id}}}
     72
     73- 1NF: Сите атрибути се атомски, нема повторувачки групи.
     74- 2NF: Сите табели имаат едноатрибутни surrogate примарни клучеви → нема делумни зависности.
     75- 3NF/BCNF: Сите атрибути кои не се клучеви зависат само од примарниот клуч.
     76И овде користам surrogate клуч за конзистентност, но истовремено додадов UNIQUE(tag_id, transaction_id) за да спречам дупликати.
     77
     78**Шемата е во 3NF (практично BCNF) за сите табели. Единствениот свесен исклучок е {{{net_amount}}} во {{{TRANSACTION}}}, кој е додаден заради перформанси.**