== ''ЕР дијаграм'' [[Image(ERmodel_v3.jpg)]] == ''Податочни побарувања'' **Ентитети** **1.** ''**Users**'' - ентитет со кој се претставуваат корисниците во системот * user_id - нумерички тип (примарен клуч кој што е serial) * email - текстуален тип (задолжителен атрибут и уникатен) * username - текстуален тип (задолжителен атрибут и уникатен) - username беше кандидат за примарен клуч но поради тоа што е текстуално поле ја успорува базата и може да биде променливо. * first_name - текстуален тип (задолжителен атрибут) * last_name - текстуален тип (задолжителен атрибут) * full_name - текстуален тип (изведен атрибут) * password - текстуален тип (задолжителен атрибут) * created_on - датум (datetime) (задолжителен атрибут) * modified_on - датум (datetime) (nullable) **2.** ''**Administrators**'' - ентитет кој ги дефинира администраторите (корисниците кои ги имаат сите привилегии) * ги наследува сите атрибути од users ентитетот и нема дополнителни атрибути **3.** ''**Clients**'' - ентитет кој ги дефинира корисниците регистрирани како клиенти * ги наследува сите атрибути од Users ентитетот и има дополнителен атрибут **4.** ''**Business_Users**'' - ентитет кој ги дефинира бизнис корисниците * ги наследува сите атрибути од users ентитетот и нема дополнителни атрибути **5.** ''**Delivery_Men**'' - ентитет кој ги дефинира доставувачите на автомобили * ги наследува сите атрибути од users ентитетот и * salary - нумерички тип (задолжителен) * date_of_employment - датум (задолжителен атрибут) **6.** ''**Companies**'' - ентитет кој ги дефинира rent a car компаниите * company_id - нумерички тип (примарен клуч) * company_name - текстуален тип (задолжителен атрибут и уникатен) - company_name беше кандидат за примарен клуч но е текстуално поле. * comp_email - текстуален тип (задолжителен атрибут и уникатен) * created_on - датум (datetime) (задолжителен атрибут) * created_by - нумерички тип (задолжителен атрибут) * modified_on - датум (datetime) (nullable) * modified_by- нумерички тип (nullable) **7.** ''**Locations**'' - ентитет кој ги дефинира локациите на компаниите * location_id - нумерички тип (парцијален клуч и serial) * company_id - надворешен клуч од Companies. * city - текстуален тип (задолжителен атрибут) * street - текстуален тип (задолжителен атрибут) * street_number - нумерички тип (задолжителен атрибут) **8.** ''**Contracts**'' * signed_date - датум (парцијален клуч) * address - текстуален тип (задолжителен атрибут) * from_date - датум (задолжителен атрибут) * to_date - датум (задолжителен атрибут) **9.** ''**Models**'' * model_id - нумерички тип (примарен клуч и serial) * model_name - текстуален тип (задолжителен атрубут) * color - текстуален тип (задолжителен атрубут) * year - нумерички тип (задолжителен атрубут) * num_of_seats - нумерички тип (задолжителен атрубут) * num_of_doors - нумерички тип (задолжителен атрубут) * fuel - текстуален тип (задолжителен атрубут) * transmission - текстуален тип (задолжителен атрубут) * vehicle_type - текстуален тип (задолжителен атрибут) **10.** ''**Vehicles**'' * vehicle_id - нумерички тип (примарен клуч и serial) * chassis_number - нумерички тип (задолжителен атрибут) * vehicle_type - текстуален тип (задолжителен атрибут) * fuel_efficiency - текстуален тип (задолжителен атрибут) * daily_rental_price - нумерички тип (задолжителен атрибут) **11.** ''**Registrations**'' * registraion_id - нумерички тип (примаен клуч и serial) * plate_num - текстуален тип (задолжителен атрибут) * registered_on - датум (задолжителен атрибут) * valid_thru - датум (задолжителен атрибут) * is_available - boolean (задолжителен атрибут) **12.** ''**Payments**'' * payment_id - нумерички тип (парцијален клуч и serial) * date - датум (задолжителен атрибут) * time - време (задолжителен атрибут) **13.** ''**Payment_Cards**'' * card_id - нумерички тип (примарен клуч и serial) * card_number - текстуален тип (задолжителен атрибут) * cvc - нумерички тип (задолжителен атрибут) * valid_thru - датум (задолжителен атрибут) * holder_name - текстуален тип (задолжителен атрибут) ''Релации'' * registered_by - 1:N релација помеѓу Business Users и Companies. Еден Business User може да регистрира повеќе компании, а една компанија може да биде регистрирана само од еден корисник. Секоја компанија мора да биде регистрирана. * is_on - 1:N релација помеѓу Companies и Locations. Една компанија може да има повеќе локации, додека на една локација може да има само една компанија. Секоја компанија мора да има барем една локација. * is_added_by - 1:N релација помеѓу Business Users и Delivery Men. Еден бизнис корисник може да додаде повеќе доставувачи, а еден доставувач е додаден од само еден бизнис корисник. Секој бизнис корисник мора да има вработено (додадено) барем еден доставувач. * works_for - 1:N релација помеѓу Companies и Delivery Men. Во една компанија се вработени повеќе доставувачи, еден доставувач работи само за една компанија. * offers_for_rent - 1:N релација помеѓу Companies и Vehicles. Една компанија има повеќе возила за изнајмување, а едно возило го изнајмува само една компанија. * is_responsible_for - M:N релација помеѓу Delivery Men и Vehicles. Еден доставувач е одговорен за повеќе возила и за едно возило се одговорни повеќе доставувачи. * delivered_car_to - M:N релација помеѓу Delivery Men и Clients. На еден клиент автомобилот може да му го достават повеќе доставувачи, еден доставувач може да им го достави автомобилот на повеќе клиенти. * signed_by - 1:N релација помеѓу Clients и Contracts. Еден корисник може да потпише (склучи) повеќе договори додека еден договор се склучува само со еден корисник. * paid_with - 1:N релација помеѓу Payment_Cards и Payments. Со една картичка може да бидат извршени повеќе плаќања, едно плаќање се извршува само со една картичка, при тоа одеднаш се плаќа целата сума (нема рати). * is_a - 1:N релација помеѓу Models и Vehicles. Едно возило е само од еден модел, еден модел има повеќе возила. * has - 1:1 релација помеѓу Vehicles и Registrations. Едно возило има само една регистрација, една регистрација му припаѓа само на едно возило. Секое возило мора да има регистрација. * owns - 1:N релација помеѓу Clients и Payment Cards. Еден корисник може да поседува повеќе платежни картички, додека една картичка му припаѓа само на еден корисник. * for_renting - 1:N релација помеѓу Vehicles и Contracts. Со еден договор се позајмува едно возило а за едно возило може да бидат склучени повеќе договори. * made - 1:N релација помеѓу Clients и Payments. Еден клиент може да изврши повеќе плаќања, а едно плаќање е направено само од еден клиент. * verified_by - 1:N релација помеѓу Adiminstrators и Companies. Еден администратор може да верификува повеќе компании, една компанија е верификувана од еден администратор. == Историјат **[https://develop.finki.ukim.mk/projects/OCRent/attachment/wiki/ERModel/ERmodel_v1.jpg "1. Верзија 1"]** - Ни беше забележано од демонстраторот дека ни фали релација помеѓу компанија и администратор. Brands и Models не треба да бидат слаби ентитети. Кардиналноста на works_for релацијата треба да биде обратно. Да додадеме id-ја на некои ентитети каде што фалеше. **[https://develop.finki.ukim.mk/projects/OCRent/attachment/wiki/ERModel/ERmodel_v2.jpg "2. Верзија 2"]** - По сугестија на професорот ентитетите Models, Locations и Payments ги направивме повторно слаби ентитети. Исто така ни беше забележано дека изнајмувањето на автомобили треба да оди преку нов ентитет Contracts а не преку Clients, и сите информации во врска со изнајмувањето да бидат чувани во договорот. Ентитетот Brands го избришавме и решивме тој податок да го чуваме како атрибут на Vehicles. **[https://develop.finki.ukim.mk/projects/OCRent/attachment/wiki/ERModel/ERmodel_v3.jpg "3. Верзија 3"]**