| 4 | | Со тоа добиваме: **user_id, non_admin_user_id, admin_id, listener_id, musical_entity_id, song_id, artist_id, event_id, album_id, playlist_id**. |
| | 4 | Со тоа добиваме: **user_id, non_admin_user_id, admin_id, listener_id, musical_entity_id, song_id, artist_id, event_id, album_id, playlist_id, role_id**. |
| 30 | | profile_photo, email, username, full_name, password, title, genre, release_date, link, playlist_cover, playlist_name, event_name, location, venue, date, time, role, grade, comment |
| | 31 | profile_photo, email, username, full_name, password, title, genre, release_date, link, playlist_cover, playlist_name, event_name, location, venue, date, time, contribution_order, role_name, grade, comment |
| 39 | | R={ playlist_id, event_id, song_id, timestamp, admin_id, profile_photo, email, username, full_name, password, title, genre, release_date, link, playlist_cover, playlist_name, event_name, location, venue, date, time, role, grade, comment, user_id, musical_entity_id, artist_id, non_admin_user_id, album_id, listener_id} |
| | 40 | R={ playlist_id, event_id, song_id, timestamp, admin_id, role_id, profile_photo, email, username, full_name, password, title, genre, release_date, link, playlist_cover, playlist_name, event_name, location, venue, date, time, contribution_order, role_name, grade, comment, user_id, musical_entity_id, artist_id, non_admin_user_id, album_id, listener_id} |
| 58 | | **{playlist_id, event_id, song_id, timestamp, admin_id}+** = { playlist_id, event_id, song_id, timestamp, admin_id, playlist_name, playlist_cover, user_id, listener_id, full_name, email, password, username, profile_photo, event_name, location, venue, date, time, link, album_id, musical_entity_id, title, genre, release_date, artist_id, non_admin_user_id, role, grade, comment} |
| | 60 | **{playlist_id, event_id, song_id, timestamp, admin_id, role_id}+** = { playlist_id, event_id, song_id, timestamp, admin_id, role_id, playlist_name, playlist_cover, user_id, listener_id, full_name, email, password, username, profile_photo, event_name, location, venue, date, time, link, album_id, musical_entity_id, title, genre, release_date, artist_id, non_admin_user_id, contribution_order, role_name, grade, comment} |
| 91 | | R1 = { playlist_id, event_id, song_id, timestamp, admin_id, user_id, listener_id, full_name, email, password, username, profile_photo, event_name, location, venue, date, time, link, album_id, musical_entity_id, title, genre, release_date, artist_id, non_admin_user_id, role, grade, comment} |
| | 94 | R1 = { playlist_id, event_id, song_id, timestamp, admin_id, role_id, user_id, listener_id, full_name, email, password, username, profile_photo, event_name, location, venue, date, time, link, album_id, musical_entity_id, title, genre, release_date, artist_id, non_admin_user_id, contribution_order, role_name, grade, comment} |
| 102 | | R2 = { playlist_id, event_id, song_id, timestamp, admin_id, user_id, listener_id, album_id, full_name, email, password, username, profile_photo, event_name, location, venue, date, time,musical_entity_id, title, genre, release_date, artist_id,non_admin_user_id, role, grade, comment} |
| | 105 | R2 = { playlist_id, event_id, song_id, timestamp, admin_id, role_id, user_id, listener_id, album_id, full_name, email, password, username, profile_photo, event_name, location, venue, date, time, musical_entity_id, title, genre, release_date, artist_id, non_admin_user_id, contribution_order, role_name, grade, comment} |
| 113 | | R3 = {playlist_id, event_id, song_id, timestamp, admin_id, user_id, listener_id, album_id, full_name, email, password, username, profile_photo, musical_entity_id, title, genre, release_date, artist_id, non_admin_user_id, role, grade, comment} |
| | 116 | R3 = {playlist_id, event_id, song_id, timestamp, admin_id, role_id, user_id, listener_id, album_id, full_name, email, password, username, profile_photo, musical_entity_id, title, genre, release_date, artist_id, non_admin_user_id, contribution_order, role_name, grade, comment} |
| | 128 | |
| | 129 | |
| | 130 | 5. **Roles(role_id, role_name)** |
| | 131 | |
| | 132 | R4 = R3 - {role_name} |
| | 133 | |
| | 134 | R4 = { playlist_id, event_id, song_id, timestamp, admin_id, role_id, user_id, listener_id, album_id, full_name, email, password, username, profile_photo, musical_entity_id, title, genre, release_date, artist_id, non_admin_user_id, contribution_order, grade, comment} |
| | 135 | |
| | 136 | Lossless join: Релацијата може да се реконструира преку join со `role_id` |
| | 137 | |
| | 138 | Dependency preservation: FD14 е сочувана преку новата релација `Roles` |
| 133 | | 5. R3 = { playlist_id, event_id, song_id, timestamp, admin_id, user_id, listener_id, album_id, full_name, email, password, username, profile_photo, musical_entity_id, title, genre, release_date, artist_id, non_admin_user_id, role, grade, comment } |
| | 147 | 5. Roles(role_id, role_name) |
| | 148 | 6. R4 = { playlist_id, event_id, song_id, timestamp, admin_id, role_id, user_id, listener_id, album_id, full_name, email, password, username, profile_photo, musical_entity_id, title, genre, release_date, artist_id, non_admin_user_id, contribution_order, grade, comment} |
| 162 | | R4 = R3 - {profile_photo, email, username, full_name, password} |
| 163 | | |
| 164 | | R4 = { playlist_id, event_id, song_id, timestamp, admin_id, user_id, listener_id, album_id, musical_entity_id, title, genre, release_date, artist_id, non_admin_user_id, role, grade, comment} |
| | 177 | R5 = R4 - {profile_photo, email, username, full_name, password} |
| | 178 | |
| | 179 | R5 = { playlist_id, event_id, song_id, timestamp, admin_id, role_id, user_id, listener_id, album_id, musical_entity_id, title, genre, release_date, artist_id, non_admin_user_id, contribution_order, grade, comment} |
| 186 | | R5 = R4 - {title, genre, release_date} |
| 187 | | |
| 188 | | R5 = { playlist_id, event_id, song_id, timestamp, admin_id,user_id, listener_id, album_id, musical_entity_id, artist_id, non_admin_user_id, role, grade, comment} |
| | 201 | R6 = R5 - {title, genre, release_date} |
| | 202 | |
| | 203 | R6 = { playlist_id, event_id, song_id, timestamp, admin_id, role_id, user_id, listener_id, album_id, musical_entity_id, artist_id, non_admin_user_id, contribution_order, grade, comment} |
| 214 | | 5. Listeners(listener_id) |
| 215 | | 6. Non_Admin_Users(non_admin_user_id) |
| 216 | | 7. Users(user_id, profile_photo, email, username, full_name, password) |
| 217 | | 8. Albums(album_id) |
| 218 | | 9. Musical_Entities(musical_entity_id, title, genre, release_date, artist_id) |
| 219 | | 10. Artists(artist_id) |
| 220 | | 11. R5 = { playlist_id, event_id, song_id, timestamp, admin_id, user_id, listener_id, album_id, musical_entity_id, artist_id, non_admin_user_id, role, grade, comment} |
| 221 | | |
| 222 | | |
| 223 | | 5. Бидејќи `role` е определен од `(artist_id, musical_entity_id)` -> имаме транзитивна зависност преку `FD6:(artist_id, musical_entity_id) -> role` |
| | 229 | 5. Roles(role_id, role_name) |
| | 230 | 6. Listeners(listener_id) |
| | 231 | 7. Non_Admin_Users(non_admin_user_id) |
| | 232 | 8. Users(user_id, profile_photo, email, username, full_name, password) |
| | 233 | 9. Albums(album_id) |
| | 234 | 10. Musical_Entities(musical_entity_id, title, genre, release_date, artist_id) |
| | 235 | 11. Artists(artist_id) |
| | 236 | 12. R6 = { playlist_id, event_id, song_id, timestamp, admin_id, role_id, user_id, listener_id, album_id, musical_entity_id, artist_id, non_admin_user_id, contribution_order, grade, comment} |
| | 237 | |
| | 238 | |
| | 239 | 5. Бидејќи `contribution_order` е определен од `(artist_id, musical_entity_id)` -> имаме транзитивна зависност преку `FD6: (artist_id, musical_entity_id) -> contribution_order` |
| 227 | | **Artist_Contributions(artist_id, musical_entity_id, role)** |
| 228 | | |
| 229 | | R6 = R5 - {role} |
| 230 | | R6 = { playlist_id, event_id, song_id, timestamp, admin_id, user_id, listener_id, album_id, musical_entity_id, artist_id, non_admin_user_id, grade, comment} |
| | 243 | **Contributions(artist_id, musical_entity_id, contribution_order)** |
| | 244 | |
| | 245 | R7 = R6 - {contribution_order} |
| | 246 | R7 = { playlist_id, event_id, song_id, timestamp, admin_id, role_id, user_id, listener_id, album_id, musical_entity_id, artist_id, non_admin_user_id, grade, comment} |
| 241 | | R7 = R6 - {grade, comment} |
| 242 | | R7 = { playlist_id, event_id, song_id, timestamp, admin_id, user_id, listener_id, album_id, musical_entity_id, artist_id, non_admin_user_id} |
| | 257 | R8 = R7 - {grade, comment} |
| | 258 | R8 = { playlist_id, event_id, song_id, timestamp, admin_id, role_id, user_id, listener_id, album_id, musical_entity_id, artist_id, non_admin_user_id} |
| 257 | | 5. Listeners(**listener_id**) -> **задоволува БКНФ** |
| 258 | | 6. Non_Admin_Users(**non_admin_user_id**) -> **задоволува БКНФ** |
| 259 | | 7. Users(**user_id**, profile_photo, email, username, full_name, password) -> **задоволува БКНФ** |
| 260 | | 8. Albums(**album_id**) -> **задоволува БКНФ** |
| 261 | | 9. Musical_Entities(**musical_entity_id**, title, genre, release_date, artist_id) -> **задоволува БКНФ** |
| 262 | | 10. Artist_Contributions(**artist_id, musical_entity_id**, role) -> **задоволува БКНФ** |
| 263 | | 11. Reviews(**listener_id, musical_entity_id**, grade, comment) -> **задоволува БКНФ** |
| 264 | | 12. Artists(**artist_id**) -> **задоволува БКНФ** |
| 265 | | 13. R7 = { **playlist_id, event_id, song_id, timestamp, admin_id, user_id, listener_id, album_id, musical_entity_id, artist_id, non_admin_user_id**} -> **задоволува БКНФ** |
| | 273 | 5. Roles(**role_id**, role_name) -> **задоволува БКНФ** |
| | 274 | 6. Listeners(**listener_id**) -> **задоволува БКНФ** |
| | 275 | 7. Non_Admin_Users(**non_admin_user_id**) -> **задоволува БКНФ** |
| | 276 | 8. Users(**user_id**, profile_photo, email, username, full_name, password) -> **задоволува БКНФ** |
| | 277 | 9. Albums(**album_id**) -> **задоволува БКНФ** |
| | 278 | 10. Musical_Entities(**musical_entity_id**, title, genre, release_date, artist_id) -> **задоволува БКНФ** |
| | 279 | 11. Contributions(**artist_id, musical_entity_id**, contribution_order) -> **задоволува БКНФ** |
| | 280 | 12. Reviews(**listener_id, musical_entity_id**, grade, comment) -> **задоволува БКНФ** |
| | 281 | 13. Artists(**artist_id**) -> **задоволува БКНФ** |
| | 282 | 14. R8 = { **playlist_id, event_id, song_id, timestamp, admin_id, role_id, user_id, listener_id, album_id, musical_entity_id, artist_id, non_admin_user_id**} -> **задоволува БКНФ** |
| 294 | | 5. Listeners(**listener_id**) |
| 295 | | 6. Non_Admin_Users(**non_admin_user_id**) |
| 296 | | 7. Users(**user_id**, profile_photo, email, username, full_name, password) |
| 297 | | 8. Albums(**album_id**) |
| 298 | | 9. Musical_Entities(**musical_entity_id**, title, genre, release_date, artist_id) |
| 299 | | 10. Artist_Contributions(**artist_id, musical_entity_id**, role) |
| 300 | | 11. Reviews(**listener_id, musical_entity_id**, grade, comment) |
| 301 | | 12. Artists(**artist_id**) |
| 302 | | 13. Playlist_Songs(**song_id, playlist_id**) |
| 303 | | 14. Performs_At (**event_id, artist_id**) |
| 304 | | 15. Likes(**listener_id, musical_entity_id**) |
| 305 | | 16. Follows(**follower_id, followee_id**) |
| 306 | | 17. Saved_Playlists (**listener_id, playlist_id**) |
| 307 | | 18. Listens (**listener_id, song_id, timestamp**) |
| | 312 | 5. Roles(**role_id**, role_name) |
| | 313 | 6. Listeners(**listener_id**) |
| | 314 | 7. Non_Admin_Users(**non_admin_user_id**) |
| | 315 | 8. Users(**user_id**, profile_photo, email, username, full_name, password) |
| | 316 | 9. Albums(**album_id**) |
| | 317 | 10. Musical_Entities(**musical_entity_id**, title, genre, release_date, artist_id) |
| | 318 | 11. Contributions(**artist_id, musical_entity_id**, contribution_order) |
| | 319 | 12. Reviews(**listener_id, musical_entity_id**, grade, comment) |
| | 320 | 13. Artists(**artist_id**) |
| | 321 | 14. Playlist_Songs(**song_id, playlist_id**) |
| | 322 | 15. Performs_At (**event_id, artist_id**) |
| | 323 | 16. Likes(**listener_id, musical_entity_id**) |
| | 324 | 17. Follows(**follower_id, followee_id**) |
| | 325 | 18. Saved_Playlists (**listener_id, playlist_id**) |
| | 326 | 19. Listens (**listener_id, song_id, timestamp**) |
| | 327 | 20. Contribution_Roles(**artist_id, musical_entity_id, role_id**) |