== Податочни побарувања == Оваа секција ги претставува концептуалниот дизајн на базата на податоци и податочните побарувања. === ЕР Дијаграм === [[Image(ER_Diagram_2.png, align=center, width=800)]] === Ентитети === ==== 1. Clients ==== '''Id''' – SERIAL (Primary Key) '''!FirstName''' – VARCHAR(50) (Mandatory attribute) '''LastName''' – VARCHAR(50) '''PhoneNumber''' – VARCHAR(20) ==== 2. Mechanics ==== '''EMBG''' – VARCHAR(13) (Primary Key) '''!FirstName''' – VARCHAR(50) (Mandatory attribute) '''!LastName''' – VARCHAR(50) (Mandatory attribute) ==== 3. Motorcycles ==== '''Id''' – SERIAL (Primary Key) '''!ClientId''' – INT (Mandatory attribute, Foreign Key to Clients.Id with ON DELETE CASCADE) '''!Model''' – VARCHAR(50) (Mandatory attribute) '''Year''' – INT '''!ChassisNumber''' – VARCHAR(50) (Unique) '''Registration''' – VARCHAR(20) '''Kilometers''' – INT ==== 4. ServiceItems ==== '''Id''' – SERIAL (Primary Key) '''!Description''' – TEXT (Mandatory attribute) '''!MeasurementUnit''' – VARCHAR(20) (Mandatory attribute) '''!PricePerUnit''' – DECIMAL(10,2) (Mandatory attribute) '''Tax''' – DECIMAL(5,2) (Mandatory attribute) ==== 5. Services ==== '''Id''' – SERIAL (Primary Key) '''!MotorcycleId''' – INT (Mandatory attribute, Foreign Key to Motorcycles.Id with ON DELETE CASCADE) '''!DateOfService''' – DATE (Mandatory attribute) '''!LaborCost''' – DECIMAL(10,2) (Mandatory attribute) '''!TotalPrice''' – DECIMAL(10,2) (Mandatory attribute; calculated manually by the application) ==== 6. ServiceAssignments (Junction Table) ==== '''!ServiceId''' – INT (Foreign Key to Services.Id with ON DELETE CASCADE) '''MechanicEMBG''' – VARCHAR(13) (Foreign Key to Mechanics.EMBG with ON DELETE CASCADE) '''!ServiceItemId''' – INT (Foreign Key to ServiceItems.Id with ON DELETE CASCADE) '''!UnitsUsed''' – DECIMAL(10,2) (Mandatory attribute) '''Composite Primary Key''': (ServiceId, MechanicEMBG, ServiceItemId) ==== 7. ServiceInvoices ==== '''Id''' – SERIAL (Primary Key) '''!ServiceId''' – INT (Unique, Mandatory attribute, Foreign Key to Services.Id with ON DELETE CASCADE) '''!IssueDate''' – TIMESTAMP (Mandatory attribute, defaults to NOW()) '''!ImagePath''' – TEXT (Mandatory attribute) ==== 8. FiscalBills ==== '''Id''' – SERIAL (Primary Key) '''!ServiceInvoiceId''' – INT (Unique, Mandatory attribute, Foreign Key to ServiceInvoices.Id with ON DELETE CASCADE) '''!IssueDateTime''' – TIMESTAMP (Mandatory attribute, defaults to NOW()) '''Description''' – TEXT '''DDV''' – DECIMAL(5,2) (Mandatory attribute) '''EDB''' – VARCHAR(15) (Mandatory attribute) === Релации === ==== Client → Motorcycle ==== '''1:N''' – Секој клиент може да има повеќе мотоцикли, но секој мотоцикл припаѓа на еден клиент.\\ '''Foreign Key''': !ClientId во Motorcycle референцира Client.Id. ==== Motorcycle → Service ==== '''1:N''' – Мотоциклот може да има повеќе сервиси, но секој сервис е поврзан со еден мотоцикл.\\ '''Foreign Key''': !MotorcycleId во Service референцира Motorcycle.Id. ==== Service ↔ Mechanic ↔ !ServiceItem ==== '''M:N''' – Сервисот може да го извршуваат повеќе механичари и да користат повеќе делови, а секој механичар/дел може да се користи во повеќе сервиси.\\ '''Јункција''': !ServiceAssignment ги поврзува Service, Mechanic, и !ServiceItem со композитен клуч (!ServiceId, MechanicEMBG, !ServiceItemId). ==== Service → !ServiceInvoice ==== '''1:1''' – Секој сервис има точно една фактура, и секоја фактура одговара на еден сервис.\\ '''Foreign Key''': !ServiceId во !ServiceInvoice референцира Service.Id. ==== !ServiceInvoice → !FiscalBill ==== '''1:1''' – Секоја сервисна фактура има една фискална сметка, и секоја фискална сметка е поврзана со една фактура.\\ '''Foreign Key''': !ServiceInvoiceId во !FiscalBill референцира !ServiceInvoice.Id.