Changes between Version 1 and Version 2 of Нормализација и подобрувања на дизајнот


Ignore:
Timestamp:
07/06/25 23:41:21 (11 days ago)
Author:
201205
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Нормализација и подобрувања на дизајнот

    v1 v2  
    11== Нормализација ==
     2
     3=== Нормализација на Transaction ===
     4
     5Првично: **Transaction = {__TransactionId__, __!RequestId*__, __!BorrowerId*__, __!LenderId*__, __!InventoryId*__, !BorrowDate, !ReturnDate, !BorrowDuration}**
     6
     7    • !RequestId референцира кон !BookRequest(!RequestId)
     8    • !BorrowerId референцира кон !AppUser(!UserId)
     9    • !LenderId референцира кон !AppUser(!UserId)
     10    • !InventoryId референцира кон Library(!InventoryId)
     11
     12||= !TransactionId =||= !RequestId =||= !BorrowerId =||= !LenderId =||= !InventoryId =||= !BorrowDate =||= !ReturnDate =||= !BorrowDuration =||
     13||= 1 =||= 1 =||= 2 =||= 3 =||= 1 =||= 2024-04-15 =||= 2024-04-25 =||= 10 =||
     14||= 2 =||= 2 =||= 3 =||= 2 =||= 2 =||= 2024-06-23 =||= 2024-06-28 =||= 5 =||
     15
     16**1НФ**: Вредностите на атрибутите се атомични.
     17
     18**2НФ**: Сите атрибути се функционално определени од примарниот клуч !TransactionId кој е составен од само еден атрибут (не е композитен).
     19
     20
     21**3НФ**: Примарниот клуч !TransactionId ги одредува сите атрибути.
     22
     23Но, ако го знаеме !RequestId, исто така ги знаеме и !BorrowerId, !LenderId, и !InventoryId, и со тоа, следува функционалната зависност:
     24
     25**!RequestId -> !BorrowerId, !LenderId, !InventoryId.**
     26
     27Што пак води до транзитивност:
     28
     29**!TransactionId -> !RequestId -> !BorrowerId**
     30
     31**!TransactionId -> !RequestId -> !LenderId**
     32
     33**!TransactionId -> !RequestId -> !InventoryId**
     34
     35Бидејќи !RequestId не е супер-клуч, односно не ги одредува сите атрибути, ја нарушува 3НФ.
     36За да го поправиме ова, може едноставно да се извадат !BorrowerId, !LenderId, и !InventoryId од релацијата Transaction, кои можеме лесно да ги добиеме преку !RequestId.
     37
     38
     39
     40
     41
     42Така новата релација станува:
     43
     44**Transaction = {__TransactionId__, __!RequestId*__, !BorrowDate, !ReturnDate, !BorrowDuration}**
     45
     46
     47**БКНФ**: Новата релација е во БКНФ, со тоа што единствената ФЗ тука е **!TransactionId -> !RequestId, !BorrowDate, !ReturnDate, !BorrowDuration**  со примарен клуч на левата страна.
     48
     49
    250
    351=== Нормализација на !BookRequest ===
     
    1462||= 2 =||= 1 =||= 4 =||= 3 =||= 2 =||= Pending =||= 2024-06-23 =||
    1563
    16 1НФ: Вредностите на атрибутите се атомични.
    17 2НФ: Сите атрибути се функционално определени од примарниот клуч !RequestId кој е составен од само еден атрибут (не е композитен).
     64**1НФ**: Вредностите на атрибутите се атомични.
     65
     66**2НФ**: Сите атрибути се функционално определени од примарниот клуч !RequestId кој е составен од само еден атрибут (не е композитен).
    1867
    1968
    20 3НФ: Примарниот клуч !RequestId ги одредува сите атрибути.
     69**3НФ**: Примарниот клуч !RequestId ги одредува сите атрибути.
    2170
    2271Но, ако ги погледнеме !InventoryId и !BookId, меѓу нив може да ја има функционалната зависност:
     
    2877
    2978Па затоа можеме да ја смениме релацијата во:
    30 **!BookRequest= {!RequestId, !RequesterId*, !OwnerId*, !InventoryId*, !RequestStatus, !RequestDate}**
     79**!BookRequest= {__RequestId__, __!RequesterId*__, __!OwnerId*__, __!InventoryId*__, !RequestStatus, !RequestDate}**
    3180
    3281И сега да ја исполнува 3НФ.
    3382
    34 БКНФ: На левата страна од ФЗ има супер-клуч.
     83**БКНФ**: На левата страна од ФЗ има супер-клуч.