== Податочни побарувања == Оваа секција ги претставува концептуалниот дизајн на базата на податоци и податочните побарувања. === ЕР Дијаграм === [[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 ==== '''!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.