Changes between Version 1 and Version 2 of Normalization


Ignore:
Timestamp:
02/04/26 08:24:56 (3 days ago)
Author:
231136
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Normalization

    v1 v2  
    1 == Нормализација
    2 За табелите од нашата база на податоци, со цел разликување на самите id за секој ентитет,
    3 ќе ги преименуваме id атрибутите во <име_на_релација>_id.
    4 Со тоа добиваме: user_id, non_admin_user_id, admin_id, listener_id,
    5 musical_entity_id, song_id, artist_id, event_id, album_id, playlist_id
     1= Нормализација
     2За табелите од нашата база на податоци, со цел разликување на самите id за секој ентитет, ќе ги преименуваме id атрибутите во <име_на_релација>_id. Со тоа добиваме: user_id, non_admin_user_id, admin_id, listener_id, musical_entity_id, song_id, artist_id, event_id, album_id, playlist_id.
    63
    74=== Функционални зависности
     
    4845album_id[[br]]
    4946
    50 **Глобална релација**
    51 R={ user_id, musical_entity_id, song_id, playlist_id, event_id, non_admin_user_id,
     47**Глобална релација** [[br]]
     48**R**={ user_id, musical_entity_id, song_id, playlist_id, event_id, non_admin_user_id,
    5249follower_id, followee_id, profile_photo, email, username, full_name, password,
    5350title, genre, release_date, link, cover, playlist_name, event_name, location, venue,
     
    5653
    5754== Покривачи
    58 **user_id+** = {user_id, profile_photo, email, username, full_name, password} -> Не ги содржи сите атрибути[[br]]
    59 **musical_entity_id+** = {musical_entity_id, title, genre, release_date, artist_id, role} -> Не ги содржи сите атрибути[[br]]
    60 **song_id+** = {song_id, link} -> Не ги содржи сите атрибути[[br]]
    61 **playlist_id+** = {playlist_id, cover, playlist_name, listener_id} -> Не ги содржи сите атрибути[[br]]
    62 **event_id+** = {event_id, event_name, location, venue, date, time, artist_id, admin_id} -> Не ги содржи сите атрибути[[br]]
    63 **non_admin_user_id+** = {non_admin_user_id} -> Не ги содржи сите атрибути[[br]]
    64 **follower_id+** = {follower_id} -> Не ги содржи сите атрибути[[br]]
    65 **followee_id+** = {followee_id} -> Не ги содржи сите атрибути[[br]]
     551. **user_id+** = {user_id, profile_photo, email, username, full_name, password} -> **Не ги содржи сите атрибути**
     562. **musical_entity_id+** = {musical_entity_id, title, genre, release_date, artist_id, role} -> **Не ги содржи сите атрибути**
     573. **song_id+** = {song_id, link} -> **Не ги содржи сите атрибути**
     584. **playlist_id+** = {playlist_id, cover, playlist_name, listener_id} -> **Не ги содржи сите атрибути**
     595. **event_id+** = {event_id, event_name, location, venue, date, time, artist_id, admin_id} -> **Не ги содржи сите атрибути**
     606. **non_admin_user_id+** = {non_admin_user_id} -> **Не ги содржи сите атрибути**
     617. **follower_id+** = {follower_id} -> **Не ги содржи сите атрибути**
     628. **followee_id+** = {followee_id} -> **Не ги содржи сите атрибути**
    6663
    6764==== Ги комбинираме покривачите за да дојдеме до сите атрибути:
    68 1. {user_id, musical_entity_id}+ = {user_id,musical_entity_id, profile_photo, email, username, full_name, password,
    69                                     title, genre, release_date, artist_id, role} -> Не ги содржи сите атрибути
     651. **{user_id, musical_entity_id}+** = {user_id,musical_entity_id, profile_photo, email, username, full_name, password, title, genre, release_date, artist_id, role} -> **Не ги содржи сите атрибути**
    7066
    71 2. {user_id, musical_entity_id, song_id}+ = {user_id, musical_entity_id, song_id, profile_photo, email, username, full_name, password,
    72                                     title, genre, release_date, artist_id, role, , link, album_id} -> Не ги содржи сите атрибути
     672. **{user_id, musical_entity_id, song_id}+** = {user_id, musical_entity_id, song_id, profile_photo, email, username, full_name, password, title, genre, release_date, artist_id, role, link, album_id} -> **Не ги содржи сите атрибути**
    7368                   
    74 3. {user_id, musical_entity_id, song_id, playlist_id }+ = {user_id, musical_entity_id, song_id, playlist_id, profile_photo, email, username, full_name, password,
    75                                     title, genre, release_date, artist_id, role , link, album_id, cover, playlist_name, listener_id, grade, comment, timestamp } -> Не ги содржи сите атрибути
     693. **{user_id, musical_entity_id, song_id, playlist_id }+** = {user_id, musical_entity_id, song_id, playlist_id, profile_photo, email, username, full_name, password, title, genre, release_date, artist_id, role , link, album_id, cover, playlist_name, listener_id, grade, comment, timestamp } -> **Не ги содржи сите атрибути**
    7670
    7771
    78 4. {user_id, musical_entity_id, song_id, playlist_id, event_id }+ = {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, admin_id, profile_photo, email, username, full_name, password,
    79                                     title, genre, release_date,  role , link, album_id,
    80                                     cover, playlist_name, listener_id, grade, comment, timestamp,
    81                                     event_name, location, venue, date, time} -> Не ги содржи сите атрибути
     724. **{user_id, musical_entity_id, song_id, playlist_id, event_id }+** = {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, admin_id, profile_photo, email, username, full_name, password,title, genre, release_date,  role , link, album_id,cover, playlist_name, listener_id, grade, comment, timestamp,event_name, location, venue, date, time} -> **Не ги содржи сите атрибути**
    8273 
    83 5. {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id}+  = {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id,  profile_photo, email, username, full_name, password,
    84                                     title, genre, release_date, , role, , link, album_id,
    85                                     cover, playlist_name, listener_id, grade, comment, timestamp,
    86                                     event_name, location, venue, date, time, admin_id } -> Не ги содржи сите атрибути
     745. **{user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id}+**  = {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id,  profile_photo, email, username, full_name, password,title, genre, release_date, role, link, album_id, cover, playlist_name, listener_id, grade, comment, timestamp, event_name, location, venue, date, time, admin_id } -> **Не ги содржи сите атрибути**
    8775
    88 6. {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, follower_id}+ = {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, follower_id,  profile_photo, email, username, full_name, password,title, genre, release_date, role, link, album_id, cover, playlist_name, listener_id, grade, comment, timestamp, event_name, location, venue, date, time, admin_id } -> Не ги содржи сите атрибути
     766. **{user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, follower_id}+** = {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, follower_id,  profile_photo, email, username, full_name, password,title, genre, release_date, role, link, album_id, cover, playlist_name, listener_id, grade, comment, timestamp, event_name, location, venue, date, time, admin_id } -> **Не ги содржи сите атрибути**
    8977
    9078
    91 7. {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, follower_id, followee_id}+ = {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, follower_id, followee_id,  profile_photo, email, username, full_name, password,title, genre, release_date, role, link, album_idcover, playlist_name, listener_id, grade, comment, timestamp, event_name, location, venue, date, time, admin_id } -> Не ги содржи сите атрибути
     797. **{user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, follower_id, followee_id}+** = {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, follower_id, followee_id,  profile_photo, email, username, full_name, password,title, genre, release_date, role, link, album_idcover, playlist_name, listener_id, grade, comment, timestamp, event_name, location, venue, date, time, admin_id } -> **Не ги содржи сите атрибути**
    9280
    9381
     828. **{user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, follower_id, followee_id, non_admin_user_id}+** = {user_id, musical_entity_id, song_id, playlist_id, event_id, follower_id, followee_id, non_admin_user_id, profile_photo, email, username, full_name, password,title, genre, release_date, role, link, album_id, artist_id, cover, playlist_name, listener_id, grade, comment, timestamp, event_name, location, venue, date, time, admin_id } -> **Ги содржи сите атрибути**
    9483
    95 8. {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, follower_id, followee_id, non_admin_user_id}+ = {user_id, musical_entity_id, song_id, playlist_id, event_id, follower_id, followee_id, non_admin_user_id, profile_photo, email, username, full_name, password,title, genre, release_date, role, link, album_id, artist_id, cover, playlist_name, listener_id, grade, comment, timestamp, event_name, location, venue, date, time, admin_id } -> Ги содржи сите атрибути
    96 
    97 Избран примарен клуч: {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, follower_id, followee_id, non_admin_user_id}[[br]]
    98 Релацијата ја задоволува 1НФ, но не ја задоволува 2НФ поради постоење на парцијални зависности
     84**Избран примарен клуч: {user_id, musical_entity_id, song_id, playlist_id, event_id, artist_id, follower_id, followee_id, non_admin_user_id}**[[br]]
     85Релацијата ја задоволува **1НФ**, но не ја задоволува **2НФ** поради постоење на парцијални зависности.
    9986
    10087== Декомпозиција во 2НФ
     
    10289Најпрво ги групираме атрибутите само според клучевите од кои зависат.
    10390
    104 user_id-> profile_photo, email, username, full_name, password
    105 musical_entity_id-> title, genre, release_date, artist_id
    106 song_id-> link, album_id
    107 playlist_id-> cover, playlist_name, listener_id
    108 event_id-> event_name, location, venue, date, time, artist_id, admin_id
     911. user_id-> profile_photo, email, username, full_name, password
     922. musical_entity_id-> title, genre, release_date, artist_id
     933. song_id-> link, album_id
     944. playlist_id-> cover, playlist_name, listener_id
     955. event_id-> event_name, location, venue, date, time, artist_id, admin_id
    10996
    11097== Декомпозиција во релации
    11198
    112 user_id-> profile_photo, email, username, full_name, password
    113 musical_entity_id-> title, genre, release_date, artist_id
    114 song_id-> link, album_id
    115 playlist_id-> cover, playlist_name, listener_id
    116 event_id-> event_name, location, venue, date, time, artist_id, admin_id
    117 (artist_id, musical_entity_id)-> role
    118 (listener_id, musical_entity_id)-> grade, comment
    119 (listener_id, song_id)-> timestamp
     99- user_id-> profile_photo, email, username, full_name, password
     100- musical_entity_id-> title, genre, release_date, artist_id
     101- song_id-> link, album_id
     102- playlist_id-> cover, playlist_name, listener_id
     103- event_id-> event_name, location, venue, date, time, artist_id, admin_id
     104- (artist_id, musical_entity_id)-> role
     105- (listener_id, musical_entity_id)-> grade, comment
     106- (listener_id, song_id)-> timestamp
    120107
    121 R1 {user_id, profile_photo, email, username, full_name, password} -> BCNF
    122 R2 {musical_entity_id, title, genre, release_date, artist_id}  -> BCNF
    123 R3 {song_id, link, album_id} -> BCNF
    124 R4 {playlist_id, cover, playlist_name, listener_id} -> BCNF
    125 R5 {event_id, event_name, location, venue, date, time, artist_id, admin_id} -> Не задоволува 3НФ
    126 R6 {(artist_id, musical_entity_id), role} -> BCNF
    127 R7 {(listener_id, musical_entity_id), grade, comment} -> BCNF
    128 R8 {(listener_id, song_id), timestamp} -> BCNF
    129 R9 {(follower_id, followee_id)} -> BCNF
    130 R10 {(playlist_id, song_id)} -> BCNF
    131 R11 {(listener_id, musical_entity_id)}
    132 R12 {(listener_id, playlist_id)}
    133 R13 {(event_id, artist_id)} -> BCNF
     108**R1 - {user_id, profile_photo, email, username, full_name, password} -> BCNF**
     109
     110**R2 - {musical_entity_id, title, genre, release_date, artist_id} -> BCNF**
     111
     112**R3 - {song_id, link, album_id} -> BCNF**
     113
     114**R4 - {playlist_id, cover, playlist_name, listener_id} -> BCNF**
     115
     116**R5 - {event_id, event_name, location, venue, date, time, artist_id, admin_id} -> Не задоволува 3НФ**
     117
     118**R6  - {(artist_id, musical_entity_id), role} -> BCNF**
     119
     120**R7 - {(listener_id, musical_entity_id), grade, comment} -> BCNF**
     121
     122**R8 - {(listener_id, song_id), timestamp} -> BCNF**
     123
     124**R9 - {(follower_id, followee_id)} -> BCNF**
     125
     126**R10 - {(playlist_id, song_id)} -> BCNF**
     127
     128**R11 - {(listener_id, musical_entity_id)}**
     129
     130**R12 - {(listener_id, playlist_id)}**
     131
     132**R13 - {(event_id, artist_id)} -> BCNF**
    134133
    135134=== Декомпозиција на R5
    136135
    137 Поради транзитивната зависност во R5 (venue -> location), поточно секој venue секогаш ќе ја има истата локација,
     136Поради транзитивната зависност во **R5 (venue -> location)**, поточно секој venue секогаш ќе ја има истата локација,
    138137правиме декомпозиција во две релации:
    139 R5.1 {event_id, event_name, venue, date, time, artist_id, admin_id}
    140 R14 {venue, location}
     138- **R5.1 {event_id, event_name, venue, date, time, artist_id, admin_id}**
     139- **R14 {venue, location}**
    141140
    142141== Проверка за 3НФ
    143142
    144 R1 Клуч: user_id и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    145 R2 Клуч: musical_entity_id и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    146 R3 Клуч: song_id и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    147 R4 {playlist_id, cover, playlist_name, listener_id} -> BCNF
    148 Клуч: playlist_id и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    149 R5.1 Клуч: event_id и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    150 R6 Клуч: (artist_id, musical_entity_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    151 R7 Клуч: (listener_id, musical_entity_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    152 R8 Клуч: (listener_id, song_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    153 R9 Клуч: (follower_id, followee_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    154 R10 Клуч: (playlist_id, song_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    155 R11 Клуч: (listener_id, musical_entity_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    156 R12 Клуч: (listener_id, playlist_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    157 R13 Клуч: (event_id, artist_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
    158 R14 Клуч: venue и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     143**R1 - Клуч: user_id и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     144
     145**R2 - Клуч: musical_entity_id и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     146
     147**R3 - Клуч: song_id и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     148
     149**R4 - Клуч: playlist_id и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     150
     151**R5.1 - Клуч: event_id и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     152
     153**R6 - Клуч: (artist_id, musical_entity_id) и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     154
     155**R7 - Клуч: (listener_id, musical_entity_id) и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     156
     157**R8 - Клуч: (listener_id, song_id) и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     158
     159**R9 - Клуч: (follower_id, followee_id) и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     160
     161**R10 - Клуч: (playlist_id, song_id) и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     162
     163**R11 - Клуч: (listener_id, musical_entity_id) и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     164
     165**R12 - Клуч: (listener_id, playlist_id) и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     166
     167**R13 - Клуч: (event_id, artist_id) и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     168
     169**R14 - Клуч: venue и сите атрибути зависат директно само од него. Релацијата е во BCNF**
     170
    159171
    160172== Финални релации во BCNF
    161 1. Users {user_id, profile_photo, email, username, full_name, password}
    162 2. Musical_Entities {musical_entity_id, title, genre, release_date, artist_id}
    163 3. Songs {song_id, link, album_id}
    164 4. Playlists {playlist_id, cover, playlist_name, listener_id}
    165 5. Events {event_id, event_name, location, venue, date, time, artist_id, admin_id}
    166 6. Artist_Contributions {artist_id, musical_entity_id, role}
    167 7. Reviews {listener_id, musical_entity_id, grade, comment}
    168 8. Listens {listener_id, song_id, timestamp}
    169 9. Follows {follower_id, followee_id}
    170 10. Playlist_Songs {playlist_id, song_id}
    171 11. Likes {listener_id, musical_entity_id}
    172 12. Saved_Playlists {listener_id, playlist_id}
    173 13. Performs_At {event_id, artist_id}
    174 14. Venues {venue, location}
     1731. **Users** {user_id, profile_photo, email, username, full_name, password}
     1742. **Musical_Entities** {musical_entity_id, title, genre, release_date, artist_id}
     1753. **Songs** {song_id, link, album_id}
     1764. **Playlists** {playlist_id, cover, playlist_name, listener_id}
     1775. **Events** {event_id, event_name, location, venue, date, time, artist_id, admin_id}
     1786. **Artist_Contributions** {artist_id, musical_entity_id, role}
     1797. **Reviews** {listener_id, musical_entity_id, grade, comment}
     1808. **Listens** {listener_id, song_id, timestamp}
     1819. **Follows** {follower_id, followee_id}
     18210. **Playlist_Songs** {playlist_id, song_id}
     18311. **Likes** {listener_id, musical_entity_id}
     18412. **Saved_Playlists** {listener_id, playlist_id}
     18513. **Performs_At** {event_id, artist_id}
     18614. **Venues** {venue, location}
    175187
    176188==  Дискусија на разликите од моделот во Фаза P2
    177189
    178 Процесот на нормализација го потврди концептуалниот дизајн од Фаза 2. Ова значи
     190
     191
     192Процесот на нормализација го потврди концептуалниот дизајн од [[html(<a href="https://develop.finki.ukim.mk/projects/finkwave/wiki/RelationalDesign" ">Фаза 2</a>)]]. Ова значи
    179193дека ЕР дијаграмот е солидно сработен. Единствена нова релација која произлезе од
    180 нормализацијата е R14 (Venues), од каде произлегува и функционалната зависност
     194нормализацијата е **R14 (Venues)**, од каде произлегува и функционалната зависност
    181195venue -> location