== Database Creation
Во овој дел е прикажан процесот на креирање и иницијализација на базата на податоци преку DDL и DML скрипти, како и дефинирање на погледи (views) за поедноставување на одредени пребарувања и прикажување на податоците.
== DDL скрипта за креирање на табелите
[[html(ddl.sql)]]
Во оваа DDL скрипта се поставени повеќе ограничувања со цел да се спречи внесување невалидни податоци и да се зачува конзистентноста на самиот систем. На пример, кај корисниците се проверува дали email адресите и телефонските броеви се во валиден формат, дали лозинката има минимална должина и дали датумот на раѓање е реален. Слични проверки има и кај компании, возила, регистрации и плаќања, каде што не се дозволени негативни цени, невалидни координати или датуми што логички не се точни.
Кај некои табели се користи автоматско бришење на зависните записи со цел да не останат невалидни податоци во базата. Ова е применето кај улогите на корисници, reviews, reports и waypoints поврзани со requests или rides. На други места се користи забрана за бришење кога податокот се уште активно се користи, како кај возила, компании и валути, за да не се наруши интегритетот на системот. Во одредени случаи се користи поставување на вредноста на null, особено кај offers, chat messages и ownership записи, со цел да се зачува историјата на податоците иако поврзаниот ентитет повеќе не постои.
Дополнително, поставени се ограничувања со кои се осигурува дека:
- датумот на истекување е секогаш по датумот на издавање,
- крајното време на возење е по почетното,
- rating вредностите се во дозволен опсег,
- секвенците (seqno) се уникатни во рамки на еден ентитет,
- еден preference може да се однесува или на компанија или на freelance возач, но не на двата истовремено.
== DML скрипта за пополнување на табелите
[[html(dml.sql)]]
== Погледи
[[html(views.sql)]]
- `vw_unassigned_requests`: Ги прикажува сите барања за превоз кои сe уште немаат добиено понуда (т.е. се во статус pending), заедно со основни информации за клиентот кој го креирал барањето.
- `vw_live_offers_for_customer`: Прикажува активни понуди за одредени клиенти, со детали за цената, ETA и податоци за возачот и клиентот за полесна комуникација и следење.
- `vw_available_drivers`: Ги враќа возачите кои моментално се достапни за возење, земајќи ги предвид валидноста на возачката дозвола и дали моментално се на смена.
- `customer_payments_ride`: Прикажува информации за извршени плаќања од клиенти поврзани со завршени возења, вклучувајќи износ, метод на плаќање и време на завршување на возењето.
- `all_drivers`: Прикажува листа на сите возачи без разлика дали се регистрирани како возачи во компанија или како фриленс возачи, заедно со основни кориснички податоци (име, презиме, телефон, email) и ознака дали припаѓаат на компанија (from_company = true) или се фриленс возачи (from_company = false).
- `reports_on_drivers_rides`: Прикажува пријави поврзани со возења, заедно со податоци за возачот и возилото, со цел следење на инциденти и проблеми.
- `reviews_on_drivers`: Прикажува оценки и коментари за возачите базирани на завршени возења, за анализа на квалитетот на услугата.
- `user_message_driver`: Ги прикажува пораките испратени од клиенти до возачи во рамки на конкретно возење, со цел следење на комуникацијата.
- `vw_live_ride_monitor`: Обезбедува реален преглед на активни возења, вклучувајќи податоци за клиент, возач, компанија, број на патници и статус на возењето за оперативен мониторинг.