== Релациски модел === ЕР Дијаграм === Дополнителен опис и објаснување Од ентитетот **User** произлегуваат **Member**, **Librarian**, и **Admin**. Го избравме овој пристап за да избегнеме дуплирање на податоците и да се овозможи сите корисници да делат заеднички атрибути додека пак специфичните ги чуваме во посебни табели. Направивме разлика и помеѓу **Book** и **BookCopy**, бидејќи една книга може да има повеќе копии, со кои што функционира целиот систем, тие се физичките примероци со кои се управува со позајмување и достапност. Исто така секоја копија од самата книга има свој статус (пр. позајмена, достапна...). Имаме посебни табели за нашите M:N релации како што се **Book_Author**, **Book_Genre**, **Category_Book**, **Event_Book** и **Event_Book_Authon**. Нашиот систем го дизајниравме да поддржува книги со повеќе автори, книги со повеќе жанрови/категории и настани кои ги поврзавме со повеќе книги и автори, не ги ограничуваме на само една книга или автор. === Ентитети за настани Делот за настани е подетално моделиран и вклучува **Event** и **EventReservation** ентитети. Притоа, **Event** дополнително е поврзан со **Book**, **Librarian** и **Author**, а додека пак **EventReservation** е поврзан со **Member**. Ова овозможува реални сценарија како промоција на книга, средба со автор, резервирање на седишта за посакуван настан и слично. === Логови Имаме дел и за следење на активности на корисникот со помош на **Logs**, моделот содржи повеќе log табели како **SearchLog**, **BookViewLog**, **AuthorLog** и **GenreLog**. Со ова овозможуваме анализа на однесувањето на корисниците и следење на нивните пребарувања и интереси од што произлегува потенцијална имплементација на препораки за корисниците. === Позајмување и резервација Делот за позајмување и резервација на книги го имплементираме преку **LoanHistory** кој поврзува **BookCopy**, **Member** и **Librarian**. Содржи информации за рокови, враќање и казни. Самите резервации се одвоени во **Reservations** што овозможува резервација без да се позајми книгата веднаш и подобра контрола врз достапноста на одредена копија на книгата. Казните или ентитетот **Fines** овозможува управување со финансиските казни на еден корисник и е поврзан со **Notifications**. === Членства и плаќања Делот за членства и плаќања ги содржи ентитетите **MembershipPlan**, **Membership** и **Payment**. Имаме различни типови членства и претплати кои се ограничени временски (месечни, полугодишни и годишни), исто така ги следиме и плаќањата на корисникот. === Нотификации Нотификациите ги имплементиравме преку ентитетот **Notifications** кој е поврзан со **Member**, **Payment** и **Fines** (со посебна табела **Fines_Notifications**) за можност за една казна да генерира повеќе нотификации (пр. за доцнење при враќање на книга). Исто така е поврзан и со **Reservation** (пр. за известување кога книга е достапна).