| | 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 | |