| | 1 | == Нормализација == |
| | 2 | |
| | 3 | === Нормализација на !BookRequest === |
| | 4 | |
| | 5 | Првично: **!BookRequest = {__RequestId__, __!RequesterId*__, __!OwnerId*__, __!BookId*__, __!InventoryId*__, !RequestStatus, !RequestDate}** |
| | 6 | |
| | 7 | • !RequesterId референцира кон User(!UserId) |
| | 8 | • !OwnerId референцира кон User(!UserId) |
| | 9 | • !BookId референцира кон Book(!BookId) |
| | 10 | • !InventoryId референцира кон Library(!InventoryId) |
| | 11 | |
| | 12 | ||= !RequestId =||= !RequesterId =||= !OwnerId =||= !BookId =||= !InventoryId =||= !RequestStatus =||= !RequestDate =|| |
| | 13 | ||= 1 =||= 1 =||= 2 =||= 1 =||= 1 =||= Approved =||= 2024-04-15 =|| |
| | 14 | ||= 2 =||= 1 =||= 4 =||= 3 =||= 2 =||= Pending =||= 2024-06-23 =|| |
| | 15 | |
| | 16 | 1НФ: Вредностите на атрибутите се атомични. |
| | 17 | 2НФ: Сите атрибути се функционално определени од примарниот клуч !RequestId кој е составен од само еден атрибут (не е композитен). |
| | 18 | |
| | 19 | |
| | 20 | 3НФ: Примарниот клуч !RequestId ги одредува сите атрибути. |
| | 21 | |
| | 22 | Но, ако ги погледнеме !InventoryId и !BookId, меѓу нив може да ја има функционалната зависност: |
| | 23 | |
| | 24 | **!InventoryId -> !BookId** |
| | 25 | |
| | 26 | Заради тоа што !InventoryId ќе биде поврзано за специфична книга, поради појавата на транзитивност !RequestId -> !InventoryId -> !BookId, и поради тоа што !InventoryId не е супер-клуч, ова може да ја наруши 3НФ. |
| | 27 | Бидејќи веќе имаме релација !ContainsLibraryBook(!InventoryId*, !BookId*), можеме безбедно да го извадиме атрибутот !BookId од !BookRequest, бидејќи преку !InventoryId можеме лесно да стигнеме до !BookId, и точно да одредиме за која книга се работи. |
| | 28 | |
| | 29 | Па затоа можеме да ја смениме релацијата во: |
| | 30 | **!BookRequest= {!RequestId, !RequesterId*, !OwnerId*, !InventoryId*, !RequestStatus, !RequestDate}** |
| | 31 | |
| | 32 | И сега да ја исполнува 3НФ. |
| | 33 | |
| | 34 | БКНФ: На левата страна од ФЗ има супер-клуч. |