| | 1 | = Релационен Модел |
| | 2 | |
| | 3 | '''Релационен дијаграм''' |
| | 4 | |
| | 5 | [[Image(RelationalModel.jpg)]] |
| | 6 | |
| | 7 | Дијаграмот е изработен во Visual Paradigm (десктоп верзија) и прикажува целосен релационен модел на базата на податоци на !DriveNet со 29 табели. |
| | 8 | |
| | 9 | |
| | 10 | '''Описна документација и аргументација''' |
| | 11 | |
| | 12 | '''users, drivers, passengers — одвоени ентитети со заедничка база''' |
| | 13 | |
| | 14 | Корисниците се моделирани преку централна табела `users` која ги содржи заедничките атрибути (име, е-пошта, телефон, аватар итн.). Возачите и патниците се одвоени табели (`drivers`, `passengers`) со специфични атрибути за секоја улога — на пример, `max_detour_percent` е атрибут само на возачот, бидејќи единствено возачот одлучува колкаво отстапување на рутата е прифатливо. Еден корисник може да биде и возач и патник истовремено. |
| | 15 | |
| | 16 | '''vehicles, manufacturers, vehicle_models — хиерархија на возила''' |
| | 17 | |
| | 18 | Возилата се поврзани со производителите (`manufacturers`) и моделите (`vehicle_models`) преку посебни табели. Ова овозможува нормализирано чување на информациите за возилата и спречува дупликати на имиња на производители и модели. |
| | 19 | |
| | 20 | '''vehicle_ownership — врска возач-возило''' |
| | 21 | |
| | 22 | Поврзувачката табела `vehicle_ownership` ја моделира врската помеѓу возачите и нивните возила, при што еден возач може да поседува повеќе возила. |
| | 23 | |
| | 24 | '''routes, route_stops — рути со меѓустаници''' |
| | 25 | |
| | 26 | Рутата (`routes`) ги дефинира почетната и крајната точка, датумот и часот, бројот на слободни места и цената по километар. Меѓустаниците се чуваат одделно во табелата `route_stops` со редоследен број, што овозможува флексибилно дефинирање на рути со произволен број на застанувања. |
| | 27 | |
| | 28 | '''bookings — резервации по сегмент''' |
| | 29 | |
| | 30 | Резервацијата (`bookings`) е поврзана со конкретен патник, рута и почетна/крајна меѓустаница. Ова овозможува патникот да резервира само дел од рутата. Табелата содржи временски марки за потврда на качување (`pickup_confirmed_at`) и слегување (`dropoff_confirmed_at`). |
| | 31 | |
| | 32 | '''fare_splits — алгоритам за поделба на трошоци''' |
| | 33 | |
| | 34 | Бидејќи апликацијата работи исклучиво со готовинско плаќање, не постои табела за трансакции. Наместо тоа, `fare_splits` ги чува пресметаните износи кои секој патник треба да ги плати на возачот, врз основа на поминатата дистанца. |
| | 35 | |
| | 36 | '''ratings — оценување меѓу корисници''' |
| | 37 | |
| | 38 | Табелата `ratings` овозможува оценување меѓу учесниците по завршено патување. Дефиниран е CHECK constraint кој обезбедува дека корисникот не може да се оцени самиот себеси (`reviewer_user_id != reviewee_user_id`). |
| | 39 | |
| | 40 | '''notifications — известувања''' |
| | 41 | |
| | 42 | Табелата `notifications` чува известувања за корисниците (нови резервации, потврди, откажувања итн.) со статус на прочитаност. |