Changes between Initial Version and Version 1 of Normalization


Ignore:
Timestamp:
02/03/26 22:58:39 (3 days ago)
Author:
231017
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Normalization

    v1 v1  
     1== Нормализација
     2За табелите од нашата база на податоци, со цел разликување на самите id за секој ентитет,
     3ќе ги преименуваме id атрибутите во <име_на_релација>_id.
     4Со тоа добиваме: user_id, non_admin_user_id, admin_id, listener_id,
     5musical_entity_id, song_id, artist_id, event_id, album_id, playlist_id
     6
     7=== Функционални зависности
     8**user_id** -> profile_photo, email, username, full_name, password[[br]]
     9**musical_entity_id** -> title, genre, release_date, artist_id[[br]]
     10**song_id** -> link, album_id[[br]]
     11**playlist_id** -> cover, playlist_name, listener_id[[br]]
     12**event_id** -> event_name, location, venue, date, time, artist_id, admin_id[[br]]
     13**(artist_id, musical_entity_id)** -> role[[br]]
     14**(listener_id, musical_entity_id)** -> grade, comment[[br]]
     15**(listener_id, song_id)** -> timestamp[[br]]
     16**non_admin_user_id** -> /[[br]]
     17**admin_id** -> /[[br]]
     18**listener_id** -> /[[br]]
     19**artist_id** -> /[[br]]
     20**album_id** -> /[[br]]
     21**(listener_id, playlist_id)** -> /[[br]]
     22**(playlist_id, song_id)** -> /[[br]]
     23**(follower_id, followee_id)** -> /[[br]]
     24**(event_id, artist_id)** -> /[[br]]
     25**(listener_id, musical_entity_id)** -> /[[br]]
     26
     27**Лево:**[[br]]
     28user_id,[[br]]
     29musical_entity_id,[[br]]
     30song_id,[[br]]
     31playlist_id,[[br]]
     32event_id,[[br]]
     33non_admin_user_id,[[br]]
     34follower_id,[[br]]
     35followee_id[[br]]
     36
     37
     38**Десно:**[[br]]
     39profile_photo, email, username, full_name, password,[[br]]
     40title, genre, release_date, link, cover, playlist_name,[[br]]
     41event_name, location, venue, date, time, role, grade, comment,[[br]]
     42timestamp[[br]]
     43
     44**Лево и десно:**[[br]]
     45artist_id, [[br]]
     46admin_id,[[br]]
     47listener_id, [[br]]
     48album_id[[br]]
     49
     50**Глобална релација**
     51R={ user_id, musical_entity_id, song_id, playlist_id, event_id, non_admin_user_id,
     52follower_id, followee_id, profile_photo, email, username, full_name, password,
     53title, genre, release_date, link, cover, playlist_name, event_name, location, venue,
     54date, time, role, grade, comment, timestamp, artist_id, admin_id, listener_id,
     55album_id }
     56
     57== Покривачи
     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]]
     66
     67==== Ги комбинираме покривачите за да дојдеме до сите атрибути:
     681. {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} -> Не ги содржи сите атрибути
     70
     712. {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} -> Не ги содржи сите атрибути
     73                   
     743. {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 } -> Не ги содржи сите атрибути
     76
     77
     784. {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} -> Не ги содржи сите атрибути
     82 
     835. {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 } -> Не ги содржи сите атрибути
     87
     886. {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 } -> Не ги содржи сите атрибути
     89
     90
     917. {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 } -> Не ги содржи сите атрибути
     92
     93
     94
     958. {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НФ поради постоење на парцијални зависности
     99
     100== Декомпозиција во 2НФ
     101
     102Најпрво ги групираме атрибутите само според клучевите од кои зависат.
     103
     104user_id-> profile_photo, email, username, full_name, password
     105musical_entity_id-> title, genre, release_date, artist_id
     106song_id-> link, album_id
     107playlist_id-> cover, playlist_name, listener_id
     108event_id-> event_name, location, venue, date, time, artist_id, admin_id
     109
     110== Декомпозиција во релации
     111
     112user_id-> profile_photo, email, username, full_name, password
     113musical_entity_id-> title, genre, release_date, artist_id
     114song_id-> link, album_id
     115playlist_id-> cover, playlist_name, listener_id
     116event_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
     120
     121R1 {user_id, profile_photo, email, username, full_name, password} -> BCNF
     122R2 {musical_entity_id, title, genre, release_date, artist_id}  -> BCNF
     123R3 {song_id, link, album_id} -> BCNF
     124R4 {playlist_id, cover, playlist_name, listener_id} -> BCNF
     125R5 {event_id, event_name, location, venue, date, time, artist_id, admin_id} -> Не задоволува 3НФ
     126R6 {(artist_id, musical_entity_id), role} -> BCNF
     127R7 {(listener_id, musical_entity_id), grade, comment} -> BCNF
     128R8 {(listener_id, song_id), timestamp} -> BCNF
     129R9 {(follower_id, followee_id)} -> BCNF
     130R10 {(playlist_id, song_id)} -> BCNF
     131R11 {(listener_id, musical_entity_id)}
     132R12 {(listener_id, playlist_id)}
     133R13 {(event_id, artist_id)} -> BCNF
     134
     135=== Декомпозиција на R5
     136
     137Поради транзитивната зависност во R5 (venue -> location), поточно секој venue секогаш ќе ја има истата локација,
     138правиме декомпозиција во две релации:
     139R5.1 {event_id, event_name, venue, date, time, artist_id, admin_id}
     140R14 {venue, location}
     141
     142== Проверка за 3НФ
     143
     144R1 Клуч: user_id и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     145R2 Клуч: musical_entity_id и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     146R3 Клуч: song_id и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     147R4 {playlist_id, cover, playlist_name, listener_id} -> BCNF
     148Клуч: playlist_id и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     149R5.1 Клуч: event_id и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     150R6 Клуч: (artist_id, musical_entity_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     151R7 Клуч: (listener_id, musical_entity_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     152R8 Клуч: (listener_id, song_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     153R9 Клуч: (follower_id, followee_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     154R10 Клуч: (playlist_id, song_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     155R11 Клуч: (listener_id, musical_entity_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     156R12 Клуч: (listener_id, playlist_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     157R13 Клуч: (event_id, artist_id) и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     158R14 Клуч: venue и сите атрибути зависат директно само од него. Релацијата е во БКНФ
     159
     160== Финални релации во BCNF
     1611. Users {user_id, profile_photo, email, username, full_name, password}
     1622. Musical_Entities {musical_entity_id, title, genre, release_date, artist_id}
     1633. Songs {song_id, link, album_id}
     1644. Playlists {playlist_id, cover, playlist_name, listener_id}
     1655. Events {event_id, event_name, location, venue, date, time, artist_id, admin_id}
     1666. Artist_Contributions {artist_id, musical_entity_id, role}
     1677. Reviews {listener_id, musical_entity_id, grade, comment}
     1688. Listens {listener_id, song_id, timestamp}
     1699. Follows {follower_id, followee_id}
     17010. Playlist_Songs {playlist_id, song_id}
     17111. Likes {listener_id, musical_entity_id}
     17212. Saved_Playlists {listener_id, playlist_id}
     17313. Performs_At {event_id, artist_id}
     17414. Venues {venue, location}
     175
     176==  Дискусија на разликите од моделот во Фаза P2
     177
     178Процесот на нормализација го потврди концептуалниот дизајн од Фаза 2. Ова значи
     179дека ЕР дијаграмот е солидно сработен. Единствена нова релација која произлезе од
     180нормализацијата е R14 (Venues), од каде произлегува и функционалната зависност
     181venue -> location