= Актуелна верзија = Дијаграм [[Image(ERModel_v7.jpg)]] == Податочни побарувања ==== Ентитети * [[span(style=color: #0000FF, **Admin:)]] Како што самото име кажува Админот ке биде ентитет кој ќе се креира директно во базата на податоци и ке има само еден. Тој ќе биде задолжен за одобрување на Возачот (Driver) профилите.** * ''Кандидат клучеви:'' Admin_Id, специјално креиран атрибут кој што ќе ни претставува клуч во базата со цел конзистентност и едноставност. * **Листа атрибути на ентитетот:** 1. ''Name'' – Текстуален тип на податок, задолжително поле. 2. ''Surname'' – Текстуален тип на податок, задолжително поле. 3. ''Email'' – Текстуален тип на податок, задолжително поле кое мора да е во форма на ''xxxxxx@mail.com'' 4. ''Password'' – Текстуален тип на податок, заполжително поле, мора да има минимум 8 карактери, 1 специјален карактер и 1 цифра. * [[span(style=color: #0000FF, **Driver:)]] Овој ентитет ке ги чува податоците за сите возачи што ги има компанијата.** * ''Кандидат клучеви:'' Driver_Id, специјално креиран атрибут кој што ќе ни претставува клуч во базата со цел конзистентност и едноставност. * **Листа атрибути на ентитетот:** 1. ''Name'' – Текстуален тип на податок, задолжително поле. 2. ''Surname'' – Текстуален тип на податок, задолжително поле. 3. ''Email'' – Текстуален тип на податок, задолжително поле кое мора да е во форма на ''xxxxxx@mail.com'' 4. ''Password'' – Текстуален тип на податок, заполжително поле, мора да има минимум 8 карактери, 1 специјален карактер и 1 цифра. 5. ''Profile_picture'' – Слика која ќе се чува како BLOB тип на податок и ќе претставува профилна фотографија на возачот, не е задолжителна. Сите слики се зачувуваат во 300x500 големина. 6. ''Price_per_km'' – Нумерички тип на податок, задолжително поле. Секој возач си има своја цена за тоа колку кошта превозот по изминат километар. 7. ''Status'' – Булеан тип на податок, најпрвин поставен на Слободен, потоа при секое возење ќе се сетира автоматски на Зафатен и обратно. 8. ''isApproved'' – булеан тип на податок, најпрвин поставен на false, доколку админот го одобри профилот на возачот, тогаш станува true. 9. ''Grade'' - Нумерички тип на податок и е просек од оценките на патувањата за тој возач 10. ''Num_grades'' - Нумерички тип на податок што претставува бројот на оцени што ги има добиено возачот. 11. ''Level'' - Текстуален тип на податок, што ни е предифинирано и може да биде Beginner, Advanced, Expert. * [[span(style=color: #0000FF, **Passenger:)]] Вистинскиот корисник на апликацијата, патникот. Овој ентитет ни ги чува податоците за сите патници кој што ја користат апликацијата.** * ''Кандидат клучеви:'' Passenger_Id, специјално креиран атрибут кој што ќе ни претставува клуч во базата со цел конзистентност и едноставност. * **Листа атрибути на ентитетот:** 1. ''Name'' – Текстуален тип на податок, задолжително поле. 2. ''Surname'' – Текстуален тип на податок, задолжително поле. 3. ''Email'' – Текстуален тип на податок, задолжително поле кое мора да е во форма на xxxxxx@mail.com 4. ''Password'' – Текстуален тип на податок, заполжително поле, мора да има минимум 8 карактери, 1 специјален карактер и 1 цифра. * [[span(style=color: #0000FF, **Car:)]] Овој ентитет ке ни служи за чување на инфомациите за сите автомобили кој што ги користат возачите.** * ''Кандидат клучеви:'' Car_Id, специјално креиран атрибут кој што ќе ни претставува клуч во базата со цел конзистентност и едноставност. Друга идеја беше да се користи license_plate атрибутот како примарен клуч, но со цел да останеме конзистенти во сите атрибути и полесно имплементирање на апликацијата, ќе користиме специјален Car_Id. * **Листа атрибути на ентитетот:** 1. ''License_plate'' – Текстуален тип на податок, задолжително поле, мора да е во формат на XX-YYYY-XX, или XX-YYY-XX, каде X е буква, Y е цифра. 2. ''Тype'' – Мултивредностен атрибут кој што се состои од Make (Текстуално поле, марка на автомобил, задолжително) Model (Текстуално поле, модел на автомобил, задолжително), Year(Нумеричко поле, година на автомобил). * [[span(style=color: #0000FF, **Drive:)]] Овој ентитет ќе ни служи за зачувување на потребни информации за сите патувања на патниците со возачите.** * ''Кандидат клучеви:'' Drive_Id, специјално креиран атрибут кој што ќе ни претставува клуч во базата со цел конзистентност и едноставност. * **Листа атрибути на ентитетот:** 1. ''Status'' – Текстуален тип на податок, задолжително поле кое што ни покажува дали ова патување е завршено, побарано од страна на некој патник, потврдено од возач или комплетирано. 2. ''Km_traveled'' – Нумерички тип на податок, задолжително поле што ни означува колку километри се извозени за одредено патување. 3. ''Start_Time'' – Датум-време тип на податок, ни го означува времето кога некое патување има започнато. 4. ''End_Time'' – Датум-време тип на податок, ни го означува времето кога некое патување има завршено. 5. ''Grade'' – Децимален тип на податок, ни ја означува оценката со која патниците го оценуваат возењето. 6. ''Destination_coordinates'' – Композитен тип на податок составен од географска должина и географска широчина и ни ја претставува дестинацијата на патникот. * [[span(style=color: #0000FF, **Payment:)]] Овој ентитет ќе ги зачувува сите наплати од возачите на патниците.** * ''Кандидат клучеви:'' Payment_Id, специјално креиран атрибут кој што ќе ни претставува клуч во базата со цел конзистентност и едноставност. * **Листа атрибути на ентитетот:** 1. ''Sum_payed'' – Нумерички тип на податок, се пресметува од Km_traveled*Price_per_km. 2. ''Driver_tip_sum'' - Нумерички тип на податок, колку бакшиш сака да му остави патникот на возачот. * [[span(style=color: #0000FF, **Request:)]] Овој ентитет ќе служи за креирање на барање а воедно и Drive кое ќе биде поврзано со ова барање. Тоа може да биде за некој точно одреден возач или пак за најблиските возачи** * ''Кандидат клучеви:'' Request_Id, специјално креиран атрибут кој што ќе ни претставува клуч во базата со цел конзистентност и едноставност. * **Листа атрибути на ентитетот:** 1. ''City_address'' – Тексуален тип на податок, градот во адресата. 2. ''Street_address'' – Тексуален тип на податок, улицата во адресата. 3. ''Number_address'' – Нумерички тип на податок, бројот во адресата. 4. ''Pick_up_coordinates'' – Композитен тип на податок составен од географска должина и географска широчина, означува каде се наоѓа патникот. 5. ''Status'' – Текстуален тип на податок, задолжително поле кое што ни покажува дали ова барање прифатено ==== Релации * [[span(style=color: #0F7209, **Approve-Account:)]] 1:N релација помеѓу Admin и Driver ентитетите и ни го претставува одобрувањето на возачките профили. Admin ентитетот е со делумно учество во релацијата додека Driver е со целосно учество. Во апликацијата ке имаме само еден админ профил кој ќе се користи за одобрување на сите возачи кој сакаат да станат дел од компанијата. * [[span(style=color: #0F7209, **Confirm:)]] 1:N релација помеѓу Driver и Request и го претставува потврдувањето на барањето за патувањe од страна на возачите. Driver и Request се со делумно учество во релацијата. За секое посебно барање имаме точно еден возач. * [[span(style=color: #0F7209, **Choose_Driver:)]] 1:N релација помеѓу Driver и Request и го претставува незадолжителното избирање на кој возач сакаме да се испрати барањето. Driver и Request се со делумно учество во релацијата. За секое посебно барање имаме точно еден возач. * [[span(style=color: #0F7209, **Executes:)]] 1:N релација помеѓу Driver и Drive и го претставува извршувањето на патувањe од страна на возачите. Driver е со делумно учество во релацијата додека Request е со целосно учество во релацијата. За секое посебно патување имаме точно еден возач. * [[span(style=color: #0F7209, **Make:)]] 1:N релација помеѓу Passenger и Request и го претставува креирањето на барање од страна на патниците. Passenger е со делумно учество во релацијата додека Request е со целосно учество. Еден патник може да креира повеќе барања, но само едно по едно. * [[span(style=color: #0F7209, **For:)]] 1:1 релација помеѓу Drive и Request и го претставува креирањето на патување за секое барање. Request е со делумно учество во релацијата додека Drive е со целосно учество. За секое посебно барање имаме точно едно патување. * [[span(style=color: #0F7209, **Passenger_pays:)]] 1:N релација помеѓу Passenger и Payment и ни преставува белешка за тоа кој патник го платил кое патување. Drive и Request се со целосно учество во релацијата. Едно барање може да има точно едно патување. * [[span(style=color: #0F7209, **Pays:)]] 1:1 релација помеѓу Drive и Payment и го претставува плаќањето на превозот од страна на патниците. И Drive и Payment се со целосно учество во релацијата. За секое патување посебно имаме точно една наплата. * [[span(style=color: #0F7209, **Drives:)]] 1:1 релација помеѓу Driveр и Car и ни претставува кој возач каков автомобил вози. Driver е со делумно учество во релацијата додека Car e со целосно учество. Секој возач вози само еден автомобил. * [[span(style=color: #0F7209, **Used:)]] 1:1 релација помеѓу Drive и Car и ни претставува каков автомобил се користи при секое возење. Drive е со целосно учество во релацијата додека Car e со делумно учество. Секое патување се извршува со точно еден автомобил. === Историјат * [attachment:ERModel_v1.jpg] , [attachment:ERmodel_v1.xml] ''Првичната верзија на ЕР дијаграмот.'' * [attachment:ERModel_v2.jpg] , [attachment:ERmodel_v2.xml] ''Направени неколку промени на лабораториски вежби.'' * [attachment:ERModel_v3.jpg] , [attachment:ERmodel_v3.xml] ''Променети атрибутите од ентитетот Driver во Request релацијата за да ги задоволат барањата за повеќе патници во еден Drive.'' * [attachment:ERModel_v4.jpg] , [attachment:ERmodel_v4.xml] ''После лабораториски вежби направена уште една промена со што останува само еден патник, бидејќи има премногу компликации.'' * [attachment:ERModel_v5.jpg] , [attachment:ERmodel_v5.xml] ''Финална одобрена верзија после консултации.'' * [attachment:ERModel_v6.jpg] , [attachment:ERmodel_v6.xml] ''Додаден уште еден атрибут во drive за дестинациската адреса, односно координати.'' * [attachment:ERModel_v7.jpg] , [attachment:ERmodel_v7.xml] ''Додаден атрибут во payment табелата за бакшиш на возачите.''