wiki:RelationalModel

Version 2 (modified by 231138, 2 weeks ago) ( diff )

--

Релационен модел

ЕР Дијаграм

Дополнителен Опис

  • Табелите users, drivers и passengers се моделирани со заедничка база. Централната табела users ги чува општите податоци за сите корисници, додека drivers и passengers се проширувања со специфични атрибути за секоја улога. Еден корисник може да биде и возач и патник истовремено.
  • Табелата vehicles е поврзана со vehicle_models и manufacturers со цел нормализација на податоците за возилата и спречување на дупликати. Врската помеѓу возачите и возилата е моделирана преку vehicle_ownership, каде историјата на сопственост се зачувува — при промена на сопственик се додава нов запис наместо да се брише стариот.
  • Табелата routes претставува шаблон за рута (дефинирана патека помеѓу две локации), додека rides претставува конкретно возење на таа рута со определен возач, возило, датум и час. Меѓустаниците се чуваат во route_stops со редоследен број, што овозможува дефинирање на рути со произволен број на застанувања. Истата локација може да се повтори на рутата (пр. round trip).
  • Табелите route_segments и passenger_segments служат за прецизна пресметка на трошоците. route_segments ги дели возењата на сегменти помеѓу два последователни стопа, додека passenger_segments чува колку патници биле присутни на секој сегмент и колку треба да плати секој патник за него. Финалниот износ за секоја резервација се чува во booking_final_fare.
  • Во повеќе табели имаме подмножества на foreign keys коишто се nullable, но нивното значење зависи од контекстот. На пример:
    • bookings(pickup_stop_id, dropoff_stop_id) — дефинираат сегментот кој го резервира патникот; ако патникот патува на целата рута, стоповите се почетниот и крајниот стоп
    • rides(recurrence_days, recurrence_end_date) — се пополнуваат само доколку is_recurring = TRUE; за еднократни возења овие полиња се NULL
  • Табелите toll_points, ride_tolls и toll_passenger_split го моделираат системот за патарини. toll_points ги чува наплатните рампи со цени по тип на возило, ride_tolls евидентира кои рампи се поминати во конкретно возење, а toll_passenger_split ја дели патарината рамномерно меѓу патниците кои биле присутни на тој сегмент.
  • Бидејќи апликацијата работи исклучиво со готовинско плаќање, не постои табела за онлајн трансакции. Наместо тоа, fare_splits и booking_final_fare служат само како референтни алатки за возачот да знае колку да наплати од секој патник.
  • Оценувањето е моделирано преку табелата ratings со CHECK constraint кој осигурува дека корисникот не може да се оцени самиот себеси (reviewer_user_id != reviewee_user_id). Оцената на возачот/патникот не се чува директно како атрибут туку се пресметува динамички преку views (driver_ratings, passenger_ratings) за да се избегне inconsistency.
  • Табелата ride_status_history и booking_status_history ги чуваат сите промени на статусот со временска марка, со цел да се овозможи целосна следливост на животниот циклус на возењето и резервацијата.
  • За зачувување на статистиките и евиденцијата дури и по бришење на корисници, сите foreign keys кон users користат ON DELETE SET DEFAULT со резервиран корисник id=0 ("избришан корисник"). Foreign keys кон структурни табели (rides, routes, bookings) користат ON DELETE RESTRICT за да спречат случајно губење на поврзани податоци.

Attachments (3)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.