[[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 - Артистите можат да бидат дел од песни/албуми, и притоа да имаат различни улоги. - Албумите можат да бидат објавени само од еден артист.