Version 1 (modified by 11 days ago) ( diff ) | ,
---|
Нормализација
Нормализација на BookRequest
Првично: BookRequest = {RequestId, RequesterId*, OwnerId*, BookId*, InventoryId*, RequestStatus, RequestDate}
- RequesterId референцира кон User(UserId)
- OwnerId референцира кон User(UserId)
- BookId референцира кон Book(BookId)
- InventoryId референцира кон Library(InventoryId)
RequestId | RequesterId | OwnerId | BookId | InventoryId | RequestStatus | RequestDate |
---|---|---|---|---|---|---|
1 | 1 | 2 | 1 | 1 | Approved | 2024-04-15 |
2 | 1 | 4 | 3 | 2 | Pending | 2024-06-23 |
1НФ: Вредностите на атрибутите се атомични. 2НФ: Сите атрибути се функционално определени од примарниот клуч RequestId кој е составен од само еден атрибут (не е композитен).
3НФ: Примарниот клуч RequestId ги одредува сите атрибути.
Но, ако ги погледнеме InventoryId и BookId, меѓу нив може да ја има функционалната зависност:
InventoryId -> BookId
Заради тоа што InventoryId ќе биде поврзано за специфична книга, поради појавата на транзитивност RequestId -> InventoryId -> BookId, и поради тоа што InventoryId не е супер-клуч, ова може да ја наруши 3НФ. Бидејќи веќе имаме релација ContainsLibraryBook(InventoryId*, BookId*), можеме безбедно да го извадиме атрибутот BookId од BookRequest, бидејќи преку InventoryId можеме лесно да стигнеме до BookId, и точно да одредиме за која книга се работи.
Па затоа можеме да ја смениме релацијата во: BookRequest= {RequestId, RequesterId*, OwnerId*, InventoryId*, RequestStatus, RequestDate}
И сега да ја исполнува 3НФ.
БКНФ: На левата страна од ФЗ има супер-клуч.