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


Ignore:
Timestamp:
08/16/25 00:08:53 (8 weeks ago)
Author:
173067
Comment:

--

Legend:

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

    v5 v6  
    11== Функционални карактеристики и нормализација ==
    22
    3 '''Functional Dependencies:'''
     3'''1. Денормализација '''
     4 - Комбинирање на сите атрибути во една табела R
    45
    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{{{
    87
    9 R = { **UserID**, Name, Surname, Email, Password, PhoneNumber, DateJoined }\\
     8R = {
     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}
    1021
     22}}}
    1123
    12 Функциски зависности:\\
     24'''2. Functional Dependencies:'''
    1325
     261. Users:
     27{{{
     28UserID → Name, Surname, Email, Password, PhoneNumber, DateJoined
     29Email → UserID
     30PhoneNumber → UserID
     31}}}
    1432
    15 **UserID** → Name, Surname, Email, PhoneNumber, Password, DateJoined\\
    16 **Email** → UserID (email мора да биде уникатен)\\
    17 **PhoneNumber** → UserID (ако е еден-на-еден релација)\\
     332. Destinations:
     34{{{
     35DestinationID → DestinationName, Country, Description, PopularAttraction, BestTimeToVisit
     36}}}
    1837
     383. Airports
     39{{{
     40AirportID → AirportName, City, AirportCountry, Code
     41Code → AirportID
     42}}}
    1943
     444. Flights
     45{{{
     46FlightID → DepartureAirportID, ArrivalAirportID, DepartureTime, ArrivalTime, Price
     47}}}
    2048
    21 1NF: атомски вредности\\
    22 2NF: сите зависности се од целиот клуч UserID\\
    23 3NF: Email и PhoneNumber функционално зависат од UserID, значи нема транзитивни зависности.\\
     495. Bookings
     50{{{
     51BookingID → UserID, FlightID, BookingDate, PaymentStatus, TotalCost, SeatNumber
     52}}}
    2453
    25 R1 = { **UserID** , Name, Surname, Email, PhoneNumber, Password, DateJoined }\\
    26 R2 = { Email , **UserID** }\\
    27 R3 = { PhoneNumber , **UserID** }\\
     546. Reviews:
     55{{{
     56ReviewID → UserID, ReviewTargetID, ReviewComment, Rating, ReviewDate
     57}}}
    2858
     597. Payments
     60{{{
     61PaymentID → BookingID, UserID, PaymentMethod, Amount, TransactionDate, PaymentStatus
     62}}}
    2963
    30 Можна декомпозиција:\\
    31 R1:{ (UserID, Name, Surname, DateJoined}\\
    32 R2:{(UserID, Email, PhoneNumber, Password}\\
    33 ________________________________________
     648. Notifications
     65{{{
     66NotificationID → UserID, Message, NotificationType, DateSent
     67}}}
    3468
    35 2. Destination Нормализација
     699. Wishlist
     70{{{
     71WishlistID → UserID, WishlistTargetID, WishlistDateAdded
     72}}}
    3673
     7410. Administrators
     75{{{
     76AdminID → AdminEmail
     77}}}
    3778
    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 ||
     7911. SupportTickets
     80{{{
     81TicketID → UserID, Subject, TicketDescription, TicketStatus, DateCreated, DateResolved, AssignedTo
     82}}}
    4183
     84'''3.Candidate Keys'''
     85- За големата табела R, суперклучот мора да ги вклучува сите ID-а за уникатна идентификација
     86Ова е огромен клуч, што ја оправдува потребата за декомпозиција
     87{{{
     88Candidate Key = {UserID, DestinationID, AirportID, FlightID, BookingID, ReviewID, PaymentID, NotificationID, WishlistID, AdminID, TicketID}
     89}}}
    4290
    43 R = { **DestinationID**, Name, Country, Description, PopularAttraction, BestTimeToVisit }\\
     91'''4. Decomposition into 1NF -> 2NF -> 3NF -> BCNF'''
     924.1. 1NF - Atomic attributes
     93Сите мулти вредносни атрибути се поделени.
     94Секој атрибут е atomic.
     95Табелата е сега во 1NF.
    4496
    45 Функционални зависности:\\
    46 **DestinationID** → Name, Country, Description, PopularAttraction, BestTimeToVisit\\
     974.2. 2NF - Отстранување на делумни зависности
     98Се отстрануваат атрибути кои зависат само од дел од композитен клуч
     99Сите атрибути зависни од индивидуални ID-a се делумни зависности.
    47100
    48 R1:{ **DestinationID** , Name, Country, Description, PopularAttraction, BestTimeToVisit }\\
     101Декомпозиција по ентитет:
     1021. Users
     103{{{
     104R_Users = {UserID, Name, Surname, Email, Password, PhoneNumber, DateJoined}
     105}}}
    49106
     1072. Destinations
     108{{{
     109R_Destinations = {DestinationID, DestinationName, Country, Description, PopularAttraction, BestTimeToVisit}
     110}}}
    50111
    51 1NF: сите атрибути се атомски\\
    52 2NF: сите атрибути зависат целосно од примарниот клуч\\
    53 3NF: бидејќи нема транзитивни зависности\\
    54 BCNF: сите детерминанти се супер-клучеви\\
    55 Заклучок: Нема потреба за дополнителна декомпозиција \\
     1123. Airports
     113{{{
     114R_Airports = {AirportID, AirportName, City, AirportCountry, Code}
     115}}}
    56116
     1174. Bookings
     118{{{
     119R_Bookings = {BookingID, UserID, FlightID, BookingDate, PaymentStatus, TotalCost, SeatNumber}
     120}}}
    57121
    58 ________________________________________\\
    59 3. Airport Нормализација\\
     1225. Reviews
     123{{{
     124R_Reviews = {ReviewID, UserID, ReviewTargetID, ReviewComment, Rating, ReviewDate}
     125}}}
    60126
     1276. Flights
     128{{{
     129R_Flights = {FlightID, DepartureAirportID, ArrivalAirportID, DepartureTime, ArrivalTime, Price}
     130}}}
    61131
    62 || AirportId || Name || City || Country || Code ||
    63 || 1 || Aleksandar Veliki || Skopje ||  Macedonia || 1234 ||
    64 || 1 || Apostol Pavle || Ohrid || Macedonia || 2345 ||
     1327. Payments
     133{{{
     134R_Payments = {PaymentID, BookingID, UserID, PaymentMethod, Amount, TransactionDate, PaymentStatus}
     135}}}
    65136
     1378. Notifications
     138{{{
     139R_Notifications = {NotificationID, UserID, Message, NotificationType, DateSent}
     140}}}
    66141
    67 R = { **AirportID**, Name, City, Country, Code }\\
     1429. Wishlist
     143{{{
     144R_Wishlist = {WishlistID, UserID, WishlistTargetID, WishlistDateAdded}
     145}}}
    68146
    69 Функционални зависности:\\
     14710. Administrators
     148{{{
     149R_Admins = {AdminID, AdminEmail}
     150}}}
    70151
    71 **AirportID** → Name, City, Country, Code\\
     15211. SupportTikets
     153{{{
     154R_Tickets = {TicketID, UserID, Subject, TicketDescription, TicketStatus, DateCreated, DateResolved, AssignedTo}
     155}}}
    72156
    73 Code → AirportID (ако е уникатен код, што реално е во авионска индустрија)\\
     157Сега секој атрибут зависи целосно од примарниот клуч -> 2NF задоволено.
    74158
     1594.3. 3NF - Отстранување на транзитивни зависности
     160Проверка на зависности на не-клучни атрибути.
     161Примери:
     162  - Корисници Email -> UserID - може да се направи посебна табела за емаил.
     163  - Аеродроми Code -> AirportID - може да се направи посебна табела за кодовите.
    75164
    76 1NF : сите атрибути се атомски\\
    77 2NF : сите атрибути зависат целосно од примарниот клуч\\
     165За повеќето нема транзитивни зависности -> 3NF задоволено.
    78166
    79 3NF: бидејќи нема транзитивни зависности\\
    80 BCNF : AirportID е супер-клуч\\
     1674.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}
    81173
    82 Можна декомпозиција (ако Code е уникатен):\\
    83 R1:{ (AirportID, Name, City, Country}\\
    84 R2:{ (AirportID, Code}\\
     174Сега сите табели се во BCNF.
    85175
    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 ||