Analýza datového modelu ke každému release-u projektu SongsAndVotes je na samostatné stránce:
Implementací požadavků z Release-u #3 projektu SongsAndVotes bychom již měli dostat, pokud jde o funkcionalitu, celkem bohatou aplikaci. Uživatelé si budou moci nastavit svůj profil, definovat vlastní playlisty, hodnotit písničky a diskutovat o nich s jinými uživateli.
Aplikace SongsAndVotes bude v tomto release-u sloužit zároveň pro komunikaci mezi uživateli, podobně jako je tomu např. u appky Messenger, jakési "odnože" sociální sítě Facebook. Uživatelé si tedy budou moci mezi sebou posílat zprávy.
Do datového modelu projektu přibudou s tímto releasem tyto business objekty:
Každý uživatel bude mít jeden uživatelský profil a každý uživatelský profil je vázán na jediného uživatele. Vztah mezi business objekty User a UserProfile je tedy 1:1 (one-to-one).
Business objekt User slouží hlavně pro zabezpečení aplikace (přihlašování, autorizace apod.), zatímco business objekt UserProfile reprezentuje uživatele, který už nějak s aplikací pracuje (už se do ní přihlásil, systém ho ověřil). Proto budeme pro ostatní vztahy mezi uživatelem a dalšími entitami (hodnocení, like-y, komentáře a zprávy) používat místo business objektu User raději business objekt UserProfile.
Uživatel si může vytvářet vlastní playlisty. Každý uživatel může mít takových playlistů několik. Vazba mezi UserProfile a Playlist je tedy 1:N.
V playlistu jsou písničky. Jeden playlist obsahuje několik písniček. A naopak – jedna písnička může být ve více playlistech. Mezi business objekty Playlist a Song je tedy vztah M:N. Bude tedy dobré definovat ještě pomocný business objekt PlaylistSong.
Každý uživatel může vytvořit libovolné množství hodnocení (pro různé písničky). Mezi UserProfile a Vote je tedy vztah 1:N. Jedna písnička může mít několik hodnocení, tj. mohlo ji hodnotit více uživatelů. Mezi Song a Vote je rovněž vztah 1:N.
U business objektu Like je to velmi podobné jako u Vote. Mezi uživatelem (jeho profilem) a like-y je tedy vztah 1:N, totéž platí pro vztah mezi písničkou a jejími like-y.
Business objekt Comment, který modeluje komentování písniček jednotlivými uživateli, je, co do vztahů s jinými business objekty, asi nejsložitějším objektem v našem projektu. Kromě toho, že se opět chová podobně jako business objekty Vote a Like, tedy že mezi UserProfile a Comment je vztah 1:N a tentýž vztah pozorujeme i mezi Song a Comment, tedy kromě tohoto chování tvoří objekty typu Comment ještě hierarchii.
Jeden komentář navazuje (může navazovat) na jiný komentář. Další komentář může být komentářem k prvnímu komentáři. A další komentář může být opět komentářem k tomu prvnímu. Tyto vzahy jsou velmi podobné komunikaci prostřednictvím elektronické pošty. Komentáře tedy tvoří posloupnosti a větve, jedná se o stromovou strukturu.
Ještě jinak si lze hierarchii představit jako rodokmen. Každý komentář má (může mít) jednoho rodiče. Rodič je předchozí komentář, na který tento komentář reaguje. A zároveň má (může mít) daný komentář několik dětí (navazujících komentářů). Jde o vztah business objektu k sobě samému, tedy o vztah mezi Comment a Comment a ten vztah je one-to-many (jeden rodič – několik dětí).
Business objekt Message, který má sloužit pro posílání zpráv mezi uživateli, je vazbami na jiné objekty trochu podobný jako business objekt Comment. Má rovněž hierarchii (vazba mezi Message a Message je 1:N), protože jedna zpráva může být např. odpovědí na jinou, předešlou zprávu.
Zároveň vztah mezi business objektem UserProfile a business objektem Message je 1:N, ale jsou to vlastně vztahy dva (vztah mezi nimi je "dvojnásobný"), protože jednou v tomto vztahu vystupuje uživatel jako odesílatel zprávy, a podruhé jako její příjemce.
Datový model pro tento release zobrazuje následující ER-diagram: