wiki:Нормализација и подобрувања на дизајнот

Version 1 (modified by 201205, 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НФ.

БКНФ: На левата страна од ФЗ има супер-клуч.

Note: See TracWiki for help on using the wiki.