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


Ignore:
Timestamp:
09/13/25 22:42:09 (5 days ago)
Author:
201205
Comment:

--

Legend:

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

    v15 v16  
    33=== Почетна релација:
    44
    5 R(!UserId, !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, !BookId, Title, Author, Language, !ImageURL, !BookISBNId, ISBN, !GenreId, Genre, !InventoryId, Availability, Condition, !WishId, Priority, !RequestId, !RequestStatus, !RequestDate, !TransactionId, !BorrowDate, !ReturnDate, !BorrowDuration, !SwapId, !ReviewId, Rating, !ReviewerComment, !ReviewDate, !MessageId, !MsgTime, !MsgDate, !MessageContent, !FriendshipId, !DateCreated, !FriendshipStatus, !ReportId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, !NotificationId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus)
     5R(!UserId, !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, !BookId, Title, Author, Language, !ImageURL, !BookISBNId, ISBN, !GenreId, Genre, !InventoryId, Availability, Condition, !WishId, Priority, !RequestId, !RequestStatus, !RequestDate, !TransactionId, !BorrowDate, !ReturnDate, !BorrowDuration, !SwapId, !ReviewId, Rating, !ReviewerComment, !ReviewDate, !MessageId, !MsgTime, !MsgDate, !MessageContent, !FriendshipId, !DateCreated, !FriendshipStatus, !ReportId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, !NotificationId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus, !RequesterId, !OwnerId, !BorrowerId, !LenderId, !TransactionId1, !TransactionId2, !ReceiverId, !GiverId, !MsgSenderId, !MsgReceiverId, !FriendshipSenderId, !FriendshipReceiverId, !ReportedUserId, !ReportingUserId)
    66
    77
     
    2424!WishId -> !UserId, Priority, !BookId
    2525
    26 !RequestId -> !UserId, !BookId, !InventoryId, !RequestStatus, !RequestDate
    27 
    28 !TransactionId  -> !RequestId, !UserId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration
    29 
    30 !SwapId -> !TransactionId
    31 
    32 !ReviewId -> !TransactionId, !UserId, Rating, !ReviewerComment, !ReviewDate
    33 
    34 !MessageId -> !UserId, !MsgTime, !MsgDate, !MessageContent
    35 
    36 !FriendshipId -> !UserId, !DateCreated, !FriendshipStatus
    37 
    38 !ReportId -> !UserId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity
    39 
    40 Notification -> !NotificationId, !TransactionId, !MessageId, !FriendshipId, !RequestId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus
    41 
    42 ----
    43 
    44 **Лево**: BookISBNId, !GenreId, !WishId, !SwapId, !ReviewId, !ReportId
    45 
    46 **Десно**: !FirstName, !LastName, Password, City, Neighborhood, Bio, Quote, Title, Author, Language, !ImageURL, ISBN, Genre, Availability, Condition, Priority, !RequestStatus, !RequestDate, !BorrowDate, !ReturnDate, !BorrowDuration, Rating, !ReviewerComment, !ReviewDate, !MsgTime, !MsgDate, !MessageContent ,!DateCreated, !FriendshipStatus, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, Type, !NotifTime, !NotifDate, Description, !NotificationStatus
    47 
    48 **Од двете страни**: !UserId, Email, Username, !BookId, !InventoryId, !RequestId, !TransactionId, !MessageId, !FriendshipId, !NotificationId
     26!RequestId -> !RequesterId, !OwnerId, !BookId, !InventoryId, !RequestStatus, !RequestDate
     27
     28!TransactionId  -> !RequestId, !BorrowerId, !LenderId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration
     29
     30!SwapId -> !TransactionId1, !TransactionId2
     31
     32!ReviewId -> !TransactionId, !ReceiverId, !GiverId, Rating, !ReviewerComment, !ReviewDate
     33
     34!MessageId -> !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent
     35
     36!FriendshipId -> !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus
     37
     38!ReportId -> !ReportedUserId, !ReportingUserId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity
     39
     40!NotificationId -> !TransactionId, !MessageId, !FriendshipId, !RequestId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus
     41
     42
     43----
     44
     45**Лево**: BookISBNId, !GenreId, !WishId, !SwapId, !ReviewId, !ReportId, NotificationId
     46
     47**Десно**: !FirstName, !LastName, Password, City, Neighborhood, Bio, Quote, Title, Author, Language, !ImageURL, ISBN, Genre, Availability, Condition, Priority, !RequestStatus, !RequestDate, !BorrowDate, !ReturnDate, !BorrowDuration, Rating, !ReviewerComment, !ReviewDate, !MsgTime, !MsgDate, !MessageContent ,!DateCreated, !FriendshipStatus, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, Type, !NotifTime, !NotifDate, Description, !NotificationStatus, !RequesterId, !OwnerId, !BorrowerId, !LenderId, !TransactionId1, !TransactionId2, !ReceiverId, !GiverId, !MsgSenderId, !MsgReceiverId, !FriendshipSenderId, !FriendshipReceiverId, !ReportedUserId, !ReportingUserId
     48
     49**Од двете страни**: !UserId, Email, Username, !BookId, !InventoryId, !RequestId, !TransactionId, !MessageId, !FriendshipId
    4950
    5051
     
    6465Не ги содржи сите атрибути
    6566
    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}
    71 
    72 Не ги содржи сите атрибути
    73 
    74 !ReportId += {!UserId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote}
    75 
    76 Не ги содржи сите атрибути
    77 
    78 **!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId** = { !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, Title, Author, Language, !ImageURL, ISBN, Genre, Priority, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, !MessageId, !FriendshipId, !RequestId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate} **Следува дека е единствен кандидат клуч и го прогласуваме за примарен клуч.**
     67!SwapId += {!TransactionId1, !TransactionId2, !RequestId, !BorrowerId, !LenderId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration, !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, Availability, Condition, !BookId, Title, Author, Language, !ImageURL}
     68
     69Не ги содржи сите атрибути
     70
     71!ReviewId += {!TransactionId, !ReceiverId, !GiverId, Rating, !ReviewerComment, !ReviewDate,
     72        !RequestId, !BorrowerId, !LenderId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration,
     73        !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote ,
     74        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     75        Availability, Condition,
     76        Title, Author, Language, !ImageURL }
     77
     78Не ги содржи сите атрибути
     79
     80!ReportId += {!ReportedUserId, !ReportingUserId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity,
     81        !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote}
     82
     83Не ги содржи сите атрибути
     84
     85!NotificationId += {!TransactionId, !MessageId, !FriendshipId, !RequestId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus,
     86                 !BorrowerId, !LenderId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration,
     87                 !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent,
     88                !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus,
     89                !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     90                !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote,
     91                 !UserId, Availability, Condition,
     92                 Title, Author, Language, !ImageURL}
     93               
     94Не ги содржи сите атрибути
     95
     96
     97!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId  =
     98        {!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId
     99        !TransactionId, !ReceiverId, !GiverId, Rating, !ReviewerComment, !ReviewDate,
     100        !RequestId, !BorrowerId, !LenderId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration,
     101        !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote ,
     102        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     103        Availability, Condition,
     104        Title, Author, Language, !ImageURL,
     105        ISBN, Genre, !UserId, Priority, !TransactionId1, !TransactionId2,
     106        !ReportedUserId, !ReportingUserId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, 
     107         !MessageId, !FriendshipId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus,
     108        !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent,
     109         !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
     110       
     111**Следува дека { !ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId } е единствен кандидат клуч и го прогласуваме за примарен клуч.**
     112
    79113
    80114=== Декомпозиција до највисока можна нормална форма
    81115
    82 Релацијата R е во 1НФ, со тоа што вредностите на сите атрибути се атомични, но не е во 2НФ, бидејќи за релацијата не е точно дека секој не-примарен атрибут е целосно функционално зависен од примарниот клуч (!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId), и со тоа имаме парцијални зависности кои ја нарушуваат 2НФ.
     116Релацијата R е во 1НФ, со тоа што вредностите на сите атрибути се атомични, но не е во 2НФ, бидејќи за релацијата не е точно дека секој не-примарен атрибут е целосно функционално зависен од примарниот клуч (!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId), и со тоа имаме парцијални зависности кои ја нарушуваат 2НФ.
    83117
    84118----
     
    98132----
    99133
    100 R2 = { !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}
     134R2 =    {!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId
     135        !TransactionId, !ReceiverId, !GiverId, Rating, !ReviewerComment, !ReviewDate,
     136        !RequestId, !BorrowerId, !LenderId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration,
     137        !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote ,
     138        !RequesterId, !OwnerId, **!BookId**, !RequestStatus, !RequestDate,
     139        Availability, Condition,
     140        ISBN, Genre, !UserId, Priority, !TransactionId1, !TransactionId2,
     141        !ReportedUserId, !ReportingUserId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, 
     142         !MessageId, !FriendshipId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus,
     143        !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent,
     144         !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
    101145
    102146R2 е се уште во 2НФ поради останатите парцијални зависности. Една од нив е !UserId -> FirstName. За да го решиме ова, ќе го ставиме !UserId во посебна релација R3, заедно со сите атрибути поврзани со него, а сите останати атрибути ги пренесуваме во R4, заедно со !UserId како заеднички атрибут.
     
    114158На ист начин продолжуваме понатаму се додека има парцијални зависности и додека не ги доведеме релациите во БКНФ:
    115159
    116 R4 = {!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}
     160R4 =    {!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId
     161        !TransactionId, !ReceiverId, !GiverId, Rating, !ReviewerComment, !ReviewDate,
     162        !RequestId, !BorrowerId, !LenderId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration,
     163        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     164        Availability, Condition,
     165        ISBN, Genre, **!UserId**, Priority, !TransactionId1, !TransactionId2,
     166        !ReportedUserId, !ReportingUserId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, 
     167         !MessageId, !FriendshipId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus,
     168        !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent,
     169         !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
    117170
    118171
     
    123176----
    124177
    125 R6 = { !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}
     178R6 =    {!ReviewId, **BookISBNId**, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId
     179        !TransactionId, !ReceiverId, !GiverId, Rating, !ReviewerComment, !ReviewDate,
     180        !RequestId, !BorrowerId, !LenderId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration,
     181        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     182        Availability, Condition,
     183        Genre, !UserId, Priority, !TransactionId1, !TransactionId2,
     184        !ReportedUserId, !ReportingUserId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, 
     185         !MessageId, !FriendshipId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus,
     186        !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent,
     187         !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
     188
    126189
    127190----
     
    131194----
    132195
    133 R8 = { !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 
    137 R9 = {**!ReviewId**, Rating, !ReviewerComment, !ReviewDate}
    138 
    139 ----
    140 
    141 R10 = { **!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 
    145 R11 = {**!ReportId**, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity}
    146 
    147 ----
    148 
    149 R12 = { !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}
     196R8 =    {!ReviewId, BookISBNId, **!GenreId**, !WishId, !SwapId, !ReportId, !NotificationId
     197        !TransactionId, !ReceiverId, !GiverId, Rating, !ReviewerComment, !ReviewDate,
     198        !RequestId, !BorrowerId, !LenderId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration,
     199        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     200        Availability, Condition,
     201        !UserId, Priority, !TransactionId1, !TransactionId2,
     202        !ReportedUserId, !ReportingUserId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, 
     203         !MessageId, !FriendshipId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus,
     204        !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent,
     205         !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
     206
     207----
     208
     209R9 = {**!ReviewId**, ReceiverId, !GiverId, Rating, !ReviewerComment, !ReviewDate}
     210
     211----
     212
     213R10 =   {**!ReviewId**, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId,
     214        !RequestId, !BorrowerId, !LenderId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration,
     215        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     216        Availability, Condition,
     217        !UserId, Priority, !TransactionId1, !TransactionId2,
     218        !ReportedUserId, !ReportingUserId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity, 
     219         !MessageId, !FriendshipId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus,
     220        !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent,
     221         !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
     222
     223----
     224
     225R11 = {**!ReportId**, !ReportedUserId, !ReportingUserId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity}
     226
     227----
     228
     229R12 =   {!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, **!ReportId**, !NotificationId, !TransactionId,
     230        !RequestId, !BorrowerId, !LenderId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration,
     231        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     232        Availability, Condition,
     233        !UserId, Priority, !TransactionId1, !TransactionId2,
     234         !MessageId, !FriendshipId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus,
     235        !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent,
     236         !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
    150237
    151238----
     
    155242----
    156243
    157 R14 = { !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 
    161 R15 = {**!TransactionId**, !BorrowDate, !ReturnDate, !BorrowDuration}
    162 
    163 ----
    164 
    165 R16 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, **!TransactionId**, !UserId, !InventoryId, Availability, Condition, !BookId, Priority, !MessageId, !FriendshipId, !RequestId, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     244R14 =   {!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, **!NotificationId**, !TransactionId,
     245        !RequestId, !BorrowerId, !LenderId, !InventoryId, !BorrowDate, !ReturnDate, !BorrowDuration,
     246        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     247        Availability, Condition,
     248        !UserId, Priority, !TransactionId1, !TransactionId2,
     249         !MessageId, !FriendshipId,
     250        !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent,
     251         !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
     252
     253----
     254
     255R15 = {**!TransactionId**, !BorrowerId, !LenderId, !BorrowDate, !ReturnDate, !BorrowDuration}
     256
     257----
     258
     259R16 =   {!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, **!TransactionId**,
     260        !RequestId,  !InventoryId,
     261        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     262        Availability, Condition,
     263        !UserId, Priority, !TransactionId1, !TransactionId2,
     264         !MessageId, !FriendshipId,
     265        !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent,
     266         !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
    166267
    167268----
     
    171272----
    172273
    173 R18 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, **!InventoryId**, !BookId, Priority, !MessageId, !FriendshipId, !RequestId, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
     274R18 =   {!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId,
     275        !RequestId,  **!InventoryId**,
     276        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     277        !UserId, Priority, !TransactionId1, !TransactionId2,
     278         !MessageId, !FriendshipId,
     279        !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent,
     280         !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
    174281
    175282----
     
    179286----
    180287
    181 R20 = { !ReviewId, !BookISBNId, !GenreId, **!WishId**, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, !InventoryId, !BookId, !MessageId, !FriendshipId, !RequestId, !MsgTime, !MsgDate, !MessageContent, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
    182 
    183 ----
    184 
    185 R21 = {**!MessageId**, !MsgTime, !MsgDate, !MessageContent}
    186 
    187 ----
    188 
    189 R22 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, !InventoryId, !BookId, **!MessageId**, !FriendshipId, !RequestId, !DateCreated, !FriendshipStatus, !RequestStatus, !RequestDate}
    190 
    191 ----
    192 
    193 R23 = {**!FriendshipId**, !DateCreated, !FriendshipStatus}
    194 
    195 ----
    196 
    197 R24 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, !InventoryId, !BookId, !MessageId, **!FriendshipId**, !RequestId,  !RequestStatus, !RequestDate}
    198 
    199 ----
    200 
    201 R25 = {**!RequestId**, !RequestStatus, !RequestDate}
    202 
    203 ----
    204 
    205 R26 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, !InventoryId, !BookId, !MessageId, !FriendshipId, **!RequestId**}
     288R20 =   {!ReviewId, BookISBNId, !GenreId, **!WishId**, !SwapId, !ReportId, !NotificationId, !TransactionId,
     289        !RequestId,  !InventoryId,
     290        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     291        !UserId, !TransactionId1, !TransactionId2,
     292         !MessageId, !FriendshipId,
     293        !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent,
     294         !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
     295
     296----
     297
     298R21 = {**!MessageId**, !MsgSenderId, !MsgReceiverId, !MsgTime, !MsgDate, !MessageContent}
     299
     300----
     301
     302R22 =   {!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId,
     303        !RequestId,  !InventoryId,
     304        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     305        !UserId, !TransactionId1, !TransactionId2,
     306         **!MessageId**, !FriendshipId,
     307         !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
     308
     309----
     310
     311R23 = {**!FriendshipId**, !FriendshipSenderId, !FriendshipReceiverId, !DateCreated, !FriendshipStatus}
     312
     313----
     314
     315R24 =   {!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId,
     316        !RequestId,  !InventoryId,
     317        !RequesterId, !OwnerId, !BookId, !RequestStatus, !RequestDate,
     318        !UserId, !TransactionId1, !TransactionId2,
     319         !MessageId, **!FriendshipId**}
     320
     321----
     322
     323R25 = {**!RequestId**, !RequesterId, !OwnerId,, !RequestStatus, !RequestDate}
     324
     325----
     326
     327R26 = {!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId,
     328        **!RequestId**,  !InventoryId,
     329         !BookId,
     330        !UserId, !TransactionId1, !TransactionId2,
     331         !MessageId, !FriendshipId}
     332
     333----
     334
     335R27 = { **!SwapId**, !TransactionId1, !TransactionId2 }
     336
     337----
     338
     339R28 =  {!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId,
     340        **!RequestId**,  !InventoryId,
     341         !BookId,
     342        !UserId,
     343         !MessageId, !FriendshipId}
     344
    206345
    207346=== Резултат од декомпозиција
    208347
     348* Примарен клуч: __underline__
     349* Надворешен клуч: __underline__ и *
     350* Not null: **bold**
     351
     352----
     353
    209354Краен резултат од релациите добиени по декомпозицијата (сите се во BCNF):
    210355
    211356**Book**
    212357
    213 R1 = {!BookId, Title, Author, Language, ImageURL}
     358R1 = {**__BookId__**, **Title**, **Author**, **Language**, ImageURL}
     359
    214360
    215361**!AppUser**
    216362
    217 R3 = {!UserId, !FirstName, !LastName, Email, Username, Password, City, Neighborhood, Bio, Quote, }
    218 
    219 **!BookISBN**
    220 
    221 R5 = {!BookISBNId, ISBN}
     363R3 = {**__UserId__**, **!FirstName**, **!LastName**, **Email**, **Username**, **Password**, **City**, **Neighborhood**, Bio, Quote}
     364
     365
     366**BookISBN**
     367
     368R5 = {**__BookISBNId__**, **ISBN**}
     369
    222370
    223371**Genre**
    224372
    225 R7 = {!GenreId, Genre}
     373R7 = {**__!GenreId__**, **Genre**}
     374
    226375
    227376**Review**
    228377
    229 R9 = {!ReviewId, Rating, !ReviewerComment, !ReviewDate}
     378R9 = {**__!ReviewId__**, *__!ReceiverId*__**, **__!GiverId*__**, **Rating**, !ReviewerComment, **!ReviewDate**}
     379    • !ReceiverId референцира кон !AppUser(!UserId)
     380    • !GiverId референцира кон !AppUser(!UserId)
     381
    230382
    231383**Report**
    232384
    233 R11 = {!ReportId, !ReportType, !ReportDate, Details, !ReportStatus, !ReportedEntity}
     385R11 = {**__ReportId__**, **__!ReportedUserId*__**, **__!ReportingUserId*__**, **!ReportType**, **!ReportDate**, Details, **!ReportStatus**, **!ReportedEntity**}
     386    • !ReportedUserId референцира кон !AppUser(!UserId)
     387    • !ReportingUserId референцира кон !AppUser(!UserId)
     388
    234389
    235390**Notification**
    236391
    237 R13 = {!NotificationId, Type, !NotifTime, !NotifDate, Description, !NotificationStatus}
     392R13 = {**__!NotificationId__**, **Type**, **!NotifTime**, **!NotifDate**, **Description**, **!NotificationStatus**}
     393
    238394
    239395**Transaction**
    240396
    241 R15 = {!TransactionId, !BorrowDate, !ReturnDate, !BorrowDuration}
     397R15 = {**__!TransactionId__**, **__!BorrowerId*__**, **__!LenderId*__**, **!BorrowDate**, **!ReturnDate**, **!BorrowDuration**}
     398    • !BorrowerId референцира кон !AppUser(!UserId)
     399    • !LenderId референцира кон !AppUser(!UserId)
     400
    242401
    243402**!LibraryBook**
    244403
    245 R17 = {!InventoryId, Availability, Condition}
     404R17 = {**__!InventoryId__**, **Availability**, **Condition**}
     405
    246406
    247407**!WishlistBook**
    248408
    249 R19 = {!WishId, Priority}
     409R19 = {**__!WishId__**, Priority}
     410
    250411
    251412**Message**
    252413
    253 R21 = {!MessageId, !MsgTime, !MsgDate, !MessageContent}
    254 
    255 **Friendship**
    256 
    257 R23 = {!FriendshipId, !DateCreated, !FriendshipStatus}
    258 
    259 **!BookRequest**
    260 
    261 R25 = {!RequestId, !RequestStatus, !RequestDate}
    262 
    263 **!EntityLinks**
    264 
    265 R26 = { !ReviewId, !BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !UserId, !InventoryId, !BookId, !MessageId, !FriendshipId, !RequestId}
     414R21 = {**__!MessageId__**, **__!MsgSenderId*__**, **__!MsgReceiverId*__**, **!MsgTime**, **!MsgDate**, **!MessageContent**}
     415    • !MsgSenderId референцира кон !AppUser(!UserId)
     416    • !MsgReceiverId референцира кон !AppUser(!UserId)
     417
     418
     419**FriendRequest**
     420
     421R23 = {**__!FriendshipId__**, **__!FriendshipSenderId*__**, **__!FriendshipReceiverId*__**, **!DateCreated**, **!FriendshipStatus**}
     422    • !FriendshipSenderId референцира кон !AppUser(!UserId)
     423    • !FriendshipReceiverId референцира кон !AppUser(!UserId)
     424
     425**BookRequest**
     426
     427R25 = {**__!RequestId__**, **__!RequesterId*__**, **__!OwnerId*__**, **!RequestStatus**, **!RequestDate**}
     428    • !RequesterId референцира кон !AppUser(!UserId)
     429    • !OwnerId референцира кон !AppUser(!UserId)
     430
     431**Swap**
     432
     433R27 = {**__SwapId__**, **__TransactionId1__**, **__TransactionId2__**}
     434    • TransactionId1 референцира кон Transaction(!TransactionId)
     435    • TransactionId2 референцира кон Transaction(!TransactionId)
     436
     437
     438**!LinkingEntities**
     439
     440R28 =  {!ReviewId, BookISBNId, !GenreId, !WishId, !SwapId, !ReportId, !NotificationId, !TransactionId, !RequestId, !InventoryId, !BookId, !UserId, !MessageId, !FriendshipId}
     441
    266442
    267443