[[Image(ERModel_v02.png, 1000px)]]
----
== Податочни барања==
=== Ентитети ===
1. **User** – ентитет кој чува информации за секаков тип корисници на апликацијата
- __user_id__ (bigint)
- profile_photo (text, not null)
- email (text, not null)
- username (text, not null)
- full_name(text, not null)
- password (text, not null)
2. **Non-Admin User** – ентитет кој чува податоци за слушателите и артистите
- __user_id*__ (bigint)
3. **Admin** – ентитет кој чува податоци за администраторот
- __user_id*__ (bigint)
4. **Listener** – ентитет кој чува податоци за слушателот на музика (секојдневен корисник)
- __user_id*__ (bigint)
5. **!MusicalEntity** - ентитет кој чува податоци за сите форми на објавена музика (Песна и Албум)
- __id__ (bigint)
- title (text, not null)
- genre (text, not null)
- release_date (date, not null)
6. **Song** – ентитет кој чува податоци за песните
- link (text, not null)
- __id*__ (bigint)
7. **Artist** – ентитет кој чува податоци за артистите (креатори на музика)
- __user_id*__ (bigint)
8. **Event** – ентитет кој чува податоци за настаните на коишто настапуваат артистите
- __event_id__ (bigint)
- location (text, not null)
- venue (text, not null)
9. **Album** – ентитет кој чува податоци за албумите објавени од артистите
- __id*__ (bigint)
10. **Playlist** – ентитет кој чува податоци за плејлистите креирани од корисниците
- __playlist_id__ (bigint)
- cover (text, not null)
- name (text, not null)
----
=== Релации ===
1. **follows** (Non-Admin User ↔ Non-Admin User N:M)
Корисницте можат да следат други корисници.
2. **performs_at** (Event ↔ Artist, N:M)
Артистите можат да настапуваат на настапи.
3. **artist_create** (Artist ↔ Event, 1:N)
Артистот може да објавува настани
4. **admin_create** (Admin ↔ Event, 1:N)
Администраторот може да објавува настани
5. **likes** (Listener ↔ !MusicalEntity, N:M)
Корисниците можат да ги додадат песните/албумите во листа на омилени (favourites).
6. **listens_to** (Listener ↔ Song, N:M)
Корисницте можат да слушаат песни и притоа се зачувува бројот на слушања.
7. **reviews** (Listener ↔ !MusicalEntity, N:M)
Корисниците можат да ги оценуваат песните/албумите со оценка (1-5) и коментар.
8. **creates** (Listener ↔ Playlist, 1:M)
Корисниците можат да креираат листи со песни.
9. **saves** (Listener ↔ Playlist, N:M)
Корисниците можат да зачувуваат листи со песни креирани од други корисници.
10. **is_in** (Song ↔ Playlist, N:M)
Песните можат да се наоѓаат во листи со песни креирани од корисниците.
11. **has** (Album ↔ Song, 1:N)
Еден албум содржи песни.
12. **modifies** (Admin ↔ Song, 1:N)
Администраторот може да ги промени метаподатоците за песните.
13. **removes** (Admin ↔ Song, 1:N)
Администраторот може да ги отстрани песните од базата.
14. **releases** (Artist ↔ !MusicalEntity, 1:N)
Артист може да објави песни/албуми.
15. **is_part_of** (Artist ↔ !MusicalEntity, N:M)
Артист може да е дел од песна/албум, и притоа да зазема различна улога (пр. главен вокал, гитарист, итн.)
=== Историјат ===
[[html(Верзија 1 - Почетна верзија)]]
[[html(Верзија 2)]]
- Админинстраторот и артистите можат да додаваат настани.
- Песните и албумите наследуваат од заедничка суперкласа - !MusicalEntity
- Артистите можат да бидат дел од песни/албуми, и притоа да имаат различни улоги.
- Албумите можат да бидат објавени само од еден артист.