== Relational diagram == [[Image(RelationalModel-VidiDB.svg, width=800)]] Напомена: Оригиналниот модел во Visual Paradigm формат е прикачен на оваа страница: [attachment:RelationalModel-VidiDB.vpp RelationalModel-VidiDB.vpp] == Descriptive documentation and argumentation == Во овој дел е детално објаснета логиката зад клучните сегменти на релациониот модел за системот Vidi. === 1. Хиерархија на содржина (Content, Movie, Series, Season, Episode) === Моделот користи специјализација за менаџирање на различните типови содржина. Ентитетот `Content` ги чува заедничките атрибути (наслов, опис, рејтинг), додека `Movie` и `Series` се посебни табели поврзани со него. * За сериите е имплементирана дополнителна хиерархија `Series -> Season -> Episode`, што овозможува прецизно следење на епизодите и нивното времетраење преку ентитетот `Watchable`. === 2. Систем за гледање и напредок Watchable, WatchHistory === За да избегнеме дуплирање на логиката за "филм" и "епизода", воведен е апстрактниот ентитет `Watchable`. * И `Movie` и `Episode` се поврзани со `Watchable`. Ова овозможува `WatchHistory` и `Watchlist` да се однесуваат на било кој медиумски елемент униформно, следејќи го процентот на изгледаност (`Progress_percentage`) без разлика на типот на содржината. === 3. Претплати и пристап (Subscription, User_Subscription, Devices) === Моделот поддржува комплексен систем на претплати: * `Subscription` ги дефинира плановите (цена, квалитет, број на уреди). * `User_Subscription` е врска која го следи времетраењето на претплатата на корисникот и дали истата автоматски се обновува. * Табелата `Devices` е поврзана со претплатата за да се осигура дека корисникот не го надминува лимитот на дозволени уреди (`MaxDevices`) дефиниран во неговиот пакет. === 4. Класификација и метаподатоци (Genre, Language, Artist) === За ефикасно пребарување, користени се "many-to-many" врски преку посреднички табели: * `Content_Genre` и `Content_Language` овозможуваат еден филм или серија да припаѓаат на повеќе жанрови и да бидат достапни на повеќе јазици. * `Artist_Content` го поврзува содржината со актерите и режисерите, каде преку `RoleType` во табелата `Artist` се дефинира нивната функција во проектот. === 5. Интеракција со корисници (Rating, Review) === Системот ги раздвојува оценките (`Rating`) од текстуалните рецензии (`Review`). Ова овозможува корисникот да остави брза нумеричка оцена која лесно се агрегира за пресметување на просечен рејтинг, но и детално мислење со датум на објава.