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


Ignore:
Timestamp:
09/13/25 16:53:11 (5 days ago)
Author:
201205
Comment:

--

Legend:

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

    v9 v10  
    6060Не ги содржи сите атрибути
    6161
    62 !WishId += {!UserId, Priority, !BookId, Title, Author, Language, !ImageURL, FirstName, LastName, Email, Username, Password, City, Neighborhood, Bio, Quote}
    63 
    64 Не ги содржи сите атрибути
    65 
    66 !SwapId += {!TransactionId, !RequestId, !UserId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration, !BookId, !RequestStatus, !RequestDate, FirstName, LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, Availability, Condition, Title, Author, Language, !ImageURL}
    67 
    68 Не ги содржи сите атрибути
    69 
    70 !ReviewId += {!TransactionId, !UserId, Rating, !ReviewerComment, !ReviewDate, !RequestId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration, FirstName, LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, !BookId, !RequestStatus, !RequestDate, Availability, Condition, Title, Author, Language, !ImageURL}
     62!WishId += {!UserId, Priority, !BookId, Title, Author, Language, !ImageURL, !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote}
     63
     64Не ги содржи сите атрибути
     65
     66!SwapId += {!TransactionId, !RequestId, !UserId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration, !BookId, !RequestStatus, !RequestDate, !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, Availability, Condition, Title, Author, Language, !ImageURL}
     67
     68Не ги содржи сите атрибути
     69
     70!ReviewId += {!TransactionId, !UserId, Rating, !ReviewerComment, !ReviewDate, !RequestId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration, !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, !BookId, !RequestStatus, !RequestDate, Availability, Condition, Title, Author, Language, !ImageURL}
    7171
    7272Не ги содржи сите атрибути
     
    8282Релацијата R е во 1НФ, со тоа што вредностите на сите атрибути се атомични, но не е во 2НФ, бидејќи за релацијата не е точно дека секој не-примарен атрибут е целосно функционално зависен од примарниот клуч (!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId), и со тоа имаме парцијални зависности кои ја нарушуваат 2НФ.
    8383
     84----
     85
     86Да претпоставиме дека првата ФЗ што прави проблем е !BookId → Title.
     87
     88Првичната релација R која ги содржи сите атрибути, ја декомпонираме на R1 и R2. Во R1 мора да биде атрибутот !BookId, заедно со сите атрибути што се поврзани со него, додека останатите атрибути одат во R2. !BookId станува заеднички атрибут за R1 и R2, за да може да се прави спојување без загуба.
     89
     90R1 = {**!BookId**, Title, Author, Language, ImageURL}
     91
     92Примарен клуч: !BookId
     93
     94ФЗ: !BookId -> Title, Author, Language, ImageURL
     95
     96На левата страна од ФЗ имаме суперклуч, ваквата релација R1 е во БКНФ, и понатаму не ја декомпонираме.
     97
     98----
     99
     100R2 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, Rating, !ReviewerComment, !ReviewDate, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration, !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, Availability, Condition, **!BookId**, ISBN, Genre, Priority, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, !MessageId, !FriendshipId, !RequestId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     101
     102R2 е се уште во 2НФ поради останатите парцијални зависности. Една од нив е !UserId -> FirstName. За да го решиме ова, ќе го ставиме !UserId во посебна релација R3, заедно со сите атрибути поврзани со него, а сите останати атрибути ги пренесуваме во R4, заедно со !UserId како заеднички атрибут.
     103
     104----
     105
     106R3 = {**!UserId**, !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote}
     107
     108Кандидат клуч: !UserId, Email, Username
     109
     110Примарен атрибут: !UserId, Email, Username
     111
     112----
     113
     114На ист начин продолжуваме понатаму се додека има парцијални зависности и додека не ги доведеме релациите во БКНФ:
     115
     116R4 = {!ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, **!UserId**, Rating, !ReviewerComment, !ReviewDate, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration, Availability, Condition, !BookId, ISBN, Genre, Priority, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, !MessageId, !FriendshipId, !RequestId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     117
     118
     119----
     120
     121R5 = {**!BookISBNId**, ISBN}
     122
     123----
     124
     125R6 = { !ReviewId, **!BookISBNId**, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, Rating, !ReviewerComment, !ReviewDate, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration, Availability, Condition, !BookId, Genre, Priority, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, !MessageId, !FriendshipId, !RequestId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     126
     127----
     128
     129R7 = {**!GenreId**, Genre}
     130
     131----
     132
     133R8 = { !ReviewId, !BookISBNId, **!GenreId**, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, Rating, !ReviewerComment, !ReviewDate, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration, Availability, Condition, !BookId, Priority, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, !MessageId, !FriendshipId, !RequestId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     134
     135----
     136
     137R9 = {**!ReviewId**, Rating, !ReviewerComment, !ReviewDate}
     138
     139----
     140
     141R10 = { **!ReviewId**, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration, !Availability, !Condition, !BookId, !Priority, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, !MessageId, !FriendshipId, !RequestId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     142
     143----
     144
     145R11 = {**!ReportId**, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity}
     146
     147----
     148
     149R12 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, **!ReportId**, !NotificationId, !TransactionId, !UserId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration, Availability, Condition, !BookId, Priority, !MessageId, !FriendshipId, !RequestId,  Type, !NotifTime, !NotifDate, Description, !NotificationStatus, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     150
     151----
     152
     153R13 = {**!NotificationId**, Type, !NotifTime, !NotifDate, Description, !NotificationStatus}
     154
     155----
     156
     157R14 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, **!NotificationId**, !TransactionId, !UserId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration, Availability, Condition, !BookId, Priority, !MessageId, !FriendshipId, !RequestId, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     158
     159----
     160
     161R15 = {**!TransactionId**, !BorrowDate, !ReturnDate, !BorrowDuration}
     162
     163----
     164
     165R16 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, **!TransactionId**, !UserId, !InventoryId, Availability, Condition, !BookId, Priority, !MessageId, !FriendshipId, !RequestId, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     166
     167----
     168
     169R17 = {**!InventoryId**, Availability, Condition}
     170
     171----
     172
     173R18 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, **!InventoryId**, !BookId, Priority, !MessageId, !FriendshipId, !RequestId, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     174
     175----
     176
     177R19 = {**!WishId**, Priority}
     178
     179----
     180
     181R20 = { !ReviewId, !BookISBNId, !GenreId, **!WishId**, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, !InventoryId, !BookId, !MessageId, !FriendshipId, !RequestId, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     182
     183----
     184
     185R21 = {**!MessageId**, !MsgTime, !MsgDate, !MessageContent}
     186
     187----
     188
     189R22 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, !InventoryId, !BookId, **!MessageId**, !FriendshipId, !RequestId, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     190
     191----
     192
     193R23 = {**!FriendshipId**, !DateCreated, !FriendshipStatus}
     194
     195----
     196
     197R24 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, !InventoryId, !BookId, !MessageId, **!FriendshipId**, !RequestId,  !RequestStatus, !RequestDate}
     198
     199----
     200
     201R25 = {**!RequestId**, !RequestStatus, !RequestDate}
     202
     203----
     204
     205R26 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, !InventoryId, !BookId, !MessageId, !FriendshipId, **!RequestId**}
     206
     207=== Резултат од декомпозиција
     208
     209Краен резултат од релациите добиени по декомпозицијата (сите се во BCNF):
     210
     211Book
     212R1 = {!BookId, Title, Author, Language, ImageURL}
     213
     214!AppUser
     215R3 = {!UserId, !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, }
     216
     217!BookISBN
     218R5 = {!BookISBNId, ISBN}
     219
     220Genre
     221R7 = {!GenreId, Genre}
     222
     223Review
     224R9 = {!ReviewId, Rating, !ReviewerComment, !ReviewDate}
     225
     226Report
     227R11 = {!ReportId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity}
     228
     229Notification
     230R13 = {!NotificationId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus}
     231
     232Transaction
     233R15 = {!TransactionId, !BorrowDate, !ReturnDate, !BorrowDuration}
     234
     235!LibraryBook
     236R17 = {!InventoryId, Availability, Condition}
     237
     238!WishlistBook
     239R19 = {!WishId, Priority}
     240
     241Message
     242R21 = {!MessageId, !MsgTime, !MsgDate, !MessageContent}
     243
     244Friendship
     245R23 = {!FriendshipId, !DateCreated, !FriendshipStatus}
     246
     247!BookRequest
     248R25 = {!RequestId, !RequestStatus, !RequestDate}
     249
     250Evidencija
     251R26 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, !InventoryId, !BookId, !MessageId, !FriendshipId, !RequestId}
     252
     253
     254* Со овој чекор на нормализација, сегашните табели се поразлични од претходните фази, и на овој начин ќе се продолжи во следната фаза.