Changes between Version 5 and Version 6 of Нормализација и подобрувања на дизајнот на базата
- Timestamp:
- 08/16/25 00:08:53 (8 weeks ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Нормализација и подобрувања на дизајнот на базата
v5 v6 1 1 == Функционални карактеристики и нормализација == 2 2 3 '''Functional Dependencies:''' 3 '''1. Денормализација ''' 4 - Комбинирање на сите атрибути во една табела R 4 5 5 || UserID || Name || Surname || Email || Password || PhoneNumber || DataJoined || 6 || 1 || Stefani Jovanoska || Sjovanoska@gmail.com || Sjovanoska123! || 078123123 || 27.4.2025 || 7 || 2 || Stefani Jovanoska || Sjovanoska123@gmail.com || Sjovanoska123!!! || 078123321 || 27.4.2025 || 6 {{{ 8 7 9 R = { **UserID**, Name, Surname, Email, Password, PhoneNumber, DateJoined }\\ 8 R = { 9 UserID, Name, Surname, Email, Password, PhoneNumber, DateJoined, 10 DestinationID, DestinationName, Country, Description, PopularAttraction, BestTimeToVisit, 11 AirportID, AirportName, City, AirportCountry, Code, 12 FlightID, DepartureAirportID, ArrivalAirportID, DepartureTime, ArrivalTime, Price, 13 BookingID, BookingDate, PaymentStatus, TotalCost, SeatNumber, 14 ReviewID, ReviewComment, Rating, ReviewDate, ReviewTargetID, 15 PaymentID, PaymentMethod, Amount, TransactionDate, PaymentStatus, 16 NotificationID, Message, NotificationType, DateSent, 17 WishlistID, WishlistTargetID, WishlistDateAdded, 18 AdminID, AdminEmail, 19 TicketID, Subject, TicketDescription, TicketStatus, DateCreated, DateResolved, AssignedTo 20 } 10 21 22 }}} 11 23 12 Функциски зависности:\\ 24 '''2. Functional Dependencies:''' 13 25 26 1. Users: 27 {{{ 28 UserID → Name, Surname, Email, Password, PhoneNumber, DateJoined 29 Email → UserID 30 PhoneNumber → UserID 31 }}} 14 32 15 **UserID** → Name, Surname, Email, PhoneNumber, Password, DateJoined\\ 16 **Email** → UserID (email мора да биде уникатен)\\ 17 **PhoneNumber** → UserID (ако е еден-на-еден релација)\\ 33 2. Destinations: 34 {{{ 35 DestinationID → DestinationName, Country, Description, PopularAttraction, BestTimeToVisit 36 }}} 18 37 38 3. Airports 39 {{{ 40 AirportID → AirportName, City, AirportCountry, Code 41 Code → AirportID 42 }}} 19 43 44 4. Flights 45 {{{ 46 FlightID → DepartureAirportID, ArrivalAirportID, DepartureTime, ArrivalTime, Price 47 }}} 20 48 21 1NF: атомски вредности\\ 22 2NF: сите зависности се од целиот клуч UserID\\ 23 3NF: Email и PhoneNumber функционално зависат од UserID, значи нема транзитивни зависности.\\ 49 5. Bookings 50 {{{ 51 BookingID → UserID, FlightID, BookingDate, PaymentStatus, TotalCost, SeatNumber 52 }}} 24 53 25 R1 = { **UserID** , Name, Surname, Email, PhoneNumber, Password, DateJoined }\\ 26 R2 = { Email , **UserID** }\\ 27 R3 = { PhoneNumber , **UserID** }\\ 54 6. Reviews: 55 {{{ 56 ReviewID → UserID, ReviewTargetID, ReviewComment, Rating, ReviewDate 57 }}} 28 58 59 7. Payments 60 {{{ 61 PaymentID → BookingID, UserID, PaymentMethod, Amount, TransactionDate, PaymentStatus 62 }}} 29 63 30 Можна декомпозиција:\\ 31 R1:{ (UserID, Name, Surname, DateJoined}\\ 32 R2:{(UserID, Email, PhoneNumber, Password}\\ 33 ________________________________________ 64 8. Notifications 65 {{{ 66 NotificationID → UserID, Message, NotificationType, DateSent 67 }}} 34 68 35 2. Destination Нормализација 69 9. Wishlist 70 {{{ 71 WishlistID → UserID, WishlistTargetID, WishlistDateAdded 72 }}} 36 73 74 10. Administrators 75 {{{ 76 AdminID → AdminEmail 77 }}} 37 78 38 || DestinationID || Name || Country || Description || PopularAttraction || BestTimeToVisit || 39 || 1 || Skopje || Macedonia || Short flight || Old town || Spring || 40 || 2 || Ohrid || Macedonia || Short flight || The Lake || Summer || 79 11. SupportTickets 80 {{{ 81 TicketID → UserID, Subject, TicketDescription, TicketStatus, DateCreated, DateResolved, AssignedTo 82 }}} 41 83 84 '''3.Candidate Keys''' 85 - За големата табела R, суперклучот мора да ги вклучува сите ID-а за уникатна идентификација 86 Ова е огромен клуч, што ја оправдува потребата за декомпозиција 87 {{{ 88 Candidate Key = {UserID, DestinationID, AirportID, FlightID, BookingID, ReviewID, PaymentID, NotificationID, WishlistID, AdminID, TicketID} 89 }}} 42 90 43 R = { **DestinationID**, Name, Country, Description, PopularAttraction, BestTimeToVisit }\\ 91 '''4. Decomposition into 1NF -> 2NF -> 3NF -> BCNF''' 92 4.1. 1NF - Atomic attributes 93 Сите мулти вредносни атрибути се поделени. 94 Секој атрибут е atomic. 95 Табелата е сега во 1NF. 44 96 45 Функционални зависности:\\ 46 **DestinationID** → Name, Country, Description, PopularAttraction, BestTimeToVisit\\ 97 4.2. 2NF - Отстранување на делумни зависности 98 Се отстрануваат атрибути кои зависат само од дел од композитен клуч 99 Сите атрибути зависни од индивидуални ID-a се делумни зависности. 47 100 48 R1:{ **DestinationID** , Name, Country, Description, PopularAttraction, BestTimeToVisit }\\ 101 Декомпозиција по ентитет: 102 1. Users 103 {{{ 104 R_Users = {UserID, Name, Surname, Email, Password, PhoneNumber, DateJoined} 105 }}} 49 106 107 2. Destinations 108 {{{ 109 R_Destinations = {DestinationID, DestinationName, Country, Description, PopularAttraction, BestTimeToVisit} 110 }}} 50 111 51 1NF: сите атрибути се атомски\\ 52 2NF: сите атрибути зависат целосно од примарниот клуч\\ 53 3NF: бидејќи нема транзитивни зависности\\ 54 BCNF: сите детерминанти се супер-клучеви\\ 55 Заклучок: Нема потреба за дополнителна декомпозиција \\ 112 3. Airports 113 {{{ 114 R_Airports = {AirportID, AirportName, City, AirportCountry, Code} 115 }}} 56 116 117 4. Bookings 118 {{{ 119 R_Bookings = {BookingID, UserID, FlightID, BookingDate, PaymentStatus, TotalCost, SeatNumber} 120 }}} 57 121 58 ________________________________________\\ 59 3. Airport Нормализација\\ 122 5. Reviews 123 {{{ 124 R_Reviews = {ReviewID, UserID, ReviewTargetID, ReviewComment, Rating, ReviewDate} 125 }}} 60 126 127 6. Flights 128 {{{ 129 R_Flights = {FlightID, DepartureAirportID, ArrivalAirportID, DepartureTime, ArrivalTime, Price} 130 }}} 61 131 62 || AirportId || Name || City || Country || Code || 63 || 1 || Aleksandar Veliki || Skopje || Macedonia || 1234 || 64 || 1 || Apostol Pavle || Ohrid || Macedonia || 2345 || 132 7. Payments 133 {{{ 134 R_Payments = {PaymentID, BookingID, UserID, PaymentMethod, Amount, TransactionDate, PaymentStatus} 135 }}} 65 136 137 8. Notifications 138 {{{ 139 R_Notifications = {NotificationID, UserID, Message, NotificationType, DateSent} 140 }}} 66 141 67 R = { **AirportID**, Name, City, Country, Code }\\ 142 9. Wishlist 143 {{{ 144 R_Wishlist = {WishlistID, UserID, WishlistTargetID, WishlistDateAdded} 145 }}} 68 146 69 Функционални зависности:\\ 147 10. Administrators 148 {{{ 149 R_Admins = {AdminID, AdminEmail} 150 }}} 70 151 71 **AirportID** → Name, City, Country, Code\\ 152 11. SupportTikets 153 {{{ 154 R_Tickets = {TicketID, UserID, Subject, TicketDescription, TicketStatus, DateCreated, DateResolved, AssignedTo} 155 }}} 72 156 73 Code → AirportID (ако е уникатен код, што реално е во авионска индустрија)\\ 157 Сега секој атрибут зависи целосно од примарниот клуч -> 2NF задоволено. 74 158 159 4.3. 3NF - Отстранување на транзитивни зависности 160 Проверка на зависности на не-клучни атрибути. 161 Примери: 162 - Корисници Email -> UserID - може да се направи посебна табела за емаил. 163 - Аеродроми Code -> AirportID - може да се направи посебна табела за кодовите. 75 164 76 1NF : сите атрибути се атомски\\ 77 2NF : сите атрибути зависат целосно од примарниот клуч\\ 165 За повеќето нема транзитивни зависности -> 3NF задоволено. 78 166 79 3NF: бидејќи нема транзитивни зависности\\ 80 BCNF : AirportID е супер-клуч\\ 167 4.4. BCNF - Секој детерминант е суперклуч 168 Проверка: левата страна на FD е суперклуч? 169 Примери: 170 - Email -> UserID -> Email е уникатен -> табела R_Email = {Email,UserID} 171 - PhoneNumber -> UserID -> табела R_Phone = {PhoneNumber, UserID} 172 - Code -> Airport -> табела R_AirportCode = {Code, AirportID} 81 173 82 Можна декомпозиција (ако Code е уникатен):\\ 83 R1:{ (AirportID, Name, City, Country}\\ 84 R2:{ (AirportID, Code}\\ 174 Сега сите табели се во BCNF. 85 175 86 87 88 Заклучок:\\ 89 Табелата Flight е целосно нормализирана и се наоѓа во 1NF, 2NF, 3NF и BCNF.\\ 90 91 92 ________________________________________\\ 93 Booking Нормализација:\\ 94 95 96 97 || BookingID || UserID || FlightID || BookingDate || PaymentStatus || TotalCost || SeatNumber || 98 || 1 || 1 || 1 || 1.1.2025 || Ok || 10000 || 1 || 99 || 2 || 2 || 2 || 1.2.2025 || Ok || 100 || 2|| 100 101 R = { BookingID, UserID, FlightID, BookingDate, PaymentStatus, TotalCost, SeatNumber } \\ 102 Функциски зависности:\\ 103 BookingID → UserID, FlightID, BookingDate, PaymentStatus, TotalCost, SeatNumber\\ 104 1NF:Сите атрибути содржат атомски вредности.\\ 105 2NF:Сите не-клучни атрибути зависат целосно од примарниот клуч BookingID.\\ 106 3NF:Нема транзитивни зависности — сите атрибути зависат директно од BookingID.\\ 107 BCNF: супер-клуч (BookingID).\\ 108 Заклучок:\\ 109 Табелата Booking е во 1NF, 2NF, 3NF и BCNF.\\ 110 ________________________________________\\ 111 Review Нормализација:\\ 112 113 114 || ReviewID || UserID || TargetID || ReviewComment || Rating || Date || 115 || 1 || 1 || 1 || ок || 5 || 1.1.2025 || 116 || 2 || 2 || 2 || ок || 5 || 1.2.2025 || 117 118 R = { ReviewID, UserID, TargetID, ReviewComment, Rating, Date }\\ 119 Функциски зависности:\\ 120 ReviewID → UserID, TargetID, ReviewComment, Rating, Date\\ 121 1NF:Сите атрибути се атомски.\\ 122 2NF:Сите атрибути зависат целосно од примарниот клуч ReviewID.\\ 123 3NF:Нема транзитивни зависности.\\ 124 BCNF:\\ 125 ReviewID е супер-клуч за сите останати атрибути.\\ 126 Заклучок:\\ 127 Табелата Review е во 1NF, 2NF, 3NF и BCNF.\\ 128 ________________________________________\\ 129 Payment Нормализација :\\ 130 131 || PaymentID || BookingID || UserID || PaymentMethod || Amount || TransactionDate || PaymentStatus || 132 || 1 || 1 || 1 || card || 10000 || 1.2.2025 || ok || 133 || 2 || 2 || 2 || card || 100 || 1.2.2025 || ok || 134 135 136 R = { PaymentID, BookingID, UserID, PaymentMethod, Amount, TransactionDate, PaymentStatus }\\ 137 Функциски зависности:\\ 138 PaymentID → BookingID, UserID, PaymentMethod, Amount, TransactionDate, PaymentStatus\\ 139 1NF:Сите атрибути содржат атомски вредности.\\ 140 2NF:Сите атрибути зависат целосно од PaymentID.\\ 141 3NF:Нема транзитивни зависности.\\ 142 BCNF:PaymentID е супер-клуч за останатите атрибути.\\ 143 Заклучок:\\ 144 Табелата Payment е во 1NF, 2NF, 3NF и BCNF.\\ 145 ________________________________________\\ 146 Notification Нормализација:\\ 147 148 149 || NotificationID || UserID || Message || Type|| DateSent || 150 || 1 || 1 || ok || 1 || 2.2.2015 || 151 || 2 || 2 || ok || 2 || 2.2.2015|| 152 153 154 R = { NotificationID, UserID, Message, Type, DateSent }\\ 155 Функциски зависности:\\ 156 NotificationID → UserID, Message, Type, DateSent\\ 157 1NF:Атомски вредности.\\ 158 2NF:Целосна зависност од NotificationID.\\ 159 3NF:Нема транзитивни зависности.\\ 160 BCNF:NotificationID е супер-клуч.\\ 161 Заклучок: Табелата Notification е во 1NF, 2NF, 3NF и BCNF.\\ 162 ________________________________________\\ 163 Wishlist Нормализација:\\ 164 165 166 || WishlistID || UserID || TargetID || DateAdded || 167 || 1 || 1 || 1 || 2.2.2025 || 168 || 2 || 2 || 2 || 2.2.2025 || 169 170 171 R = { WishlistID, UserID, TargetID, DateAdded }\\ 172 Функциски зависности:\\ 173 WishlistID → UserID, TargetID, DateAdded\\ 174 1NF:Атомски атрибути.\\ 175 2NF:Целосна зависност од WishlistID.\\ 176 3NF:Нема транзитивни зависности.\\ 177 BCNF:\\ 178 WishlistID е супер-клуч.\\ 179 Заклучок:\\ 180 Табелата Wishlist е во 1NF, 2NF, 3NF и BCNF.\\ 181 ________________________________________\\ 182 Administrator Нормализација :\\ 183 184 || AdminID || Email || 185 || 1 || stefanijovanoska@gmail.com || 186 || 2 || Stefani123@gmail.com || 187 188 189 R = { AdminID, Email }\\ 190 Функциски зависности:\\ 191 AdminID → Email\\ 192 1NF:Сите атрибути се атомски.\\ 193 2NF:Целосна зависност од AdminID.\\ 194 3NF:Нема транзитивни зависности.\\ 195 BCNF:AdminID е супер-клуч.\\ 196 Заклучок:\\ 197 Табелата Administrator е во 1NF, 2NF, 3NF и BCNF.\\ 198 ________________________________________\\ 199 SupportTicket Нормализација:\\ 200 201 || TicketID || UserID || Subject || Description || Status || DateCreated || DateResolved || AssignedTo || 202 || 1 || 1 || Wrong id on the card || Need changes || waiting || 1.2.2015 || 1.2.2015 || Stefani || 203 || 2 || 2 || Wrong id on the card || Need changes || waiting || 1.2.2015 || 1.2.2015 || Stefani || 204 205 206 207 R = { TicketID, UserID, Subject, Description, Status, DateCreated, DateResolved, AssignedTo }\\ 208 Функциски зависности:\\ 209 TicketID → UserID, Subject, Description, Status, DateCreated, DateResolved, AssignedTo\\ 210 1NF:Атомски вредности.\\ 211 2NF:Сите атрибути зависат целосно од TicketID.\\ 212 3NF:Нема транзитивни зависности.\\ 213 BCNF:TicketID е супер-клуч.\\ 214 Заклучок:\\ 215 Табелата SupportTicket е во 1NF, 2NF, 3NF и BCNF.\\ 216 217 218 176 '''5. Крајна нормализирана структура''' 177 || Table || Attributes || Note || 178 || Users || UserID, Name, Surname, Password, DateJoined || BCNF || 179 || Emails || Email, UserID || BCNF || 180 || Phones || PhoneNumber, UserID || BCNF || 181 || Destinations || DestinationID, DestinationName, Country, Description, PopularAttraction, BestTimeToVisit || BCNF || 182 || Airports || AirportID, AirportName, City, AirportCountry || BCNF || 183 || AirportCodes || Code,AirportID || BCNF || 184 || Flights || FlightID, DepartureAirportID, ArrivalAirportID, DepartureTime, ArrivalTime, Price || BCNF || 185 || Bookings || BookingID, UserID, FlightID, BookingDate, PaymentStatus, TotalCost, SeatNumber || BCNF || 186 || Reviews || ReviewID, UserID, ReviewTargetID, ReviewComment, Rating, ReviewDate || BCNF || 187 || Payments || PaymentID, BookingID, UserID, PaymentMethod, Amount, TransactionDate, PaymentStatus || BCNF || 188 || Notifications || NotificationID, UserID, Message, NotificationType, DateSent || BCNF || 189 || Wishlist || WishlistID, UserID, WishlistTargetID, WishlistDateAdded || BCNF || 190 || Admins || AdminID, AdminEmail || BCNF || 191 || Support Tickets || TicketID, UserID, Subject, TicketDescription, TicketStatus, DateCreated, DateResolved, AssignedTo || BCNF ||