Загрузка данных


CREATE TABLE Client (
    client_id INT PRIMARY KEY AUTO_INCREMENT,
    full_name VARCHAR(100) NOT NULL,
    phone VARCHAR(20) NOT NULL,
    email VARCHAR(100),
    address VARCHAR(200)
);

CREATE TABLE Car (
    car_id INT PRIMARY KEY AUTO_INCREMENT,
    client_id INT NOT NULL,
    brand VARCHAR(50) NOT NULL,
    model VARCHAR(50) NOT NULL,
    license_plate VARCHAR(20) NOT NULL,
    vin VARCHAR(17),
    year INT,
    FOREIGN KEY (client_id) REFERENCES Client(client_id)
);

CREATE TABLE Mechanic (
    mechanic_id INT PRIMARY KEY AUTO_INCREMENT,
    full_name VARCHAR(100) NOT NULL,
    specialization VARCHAR(100),
    phone VARCHAR(20) NOT NULL,
    rating DECIMAL(3,2) DEFAULT 0.00
);

CREATE TABLE Service (
    service_id INT PRIMARY KEY AUTO_INCREMENT,
    service_name VARCHAR(100) NOT NULL,
    category VARCHAR(50),
    base_price DECIMAL(10,2) NOT NULL,
    duration_hours DECIMAL(4,2)
);

CREATE TABLE Request (
    request_id INT PRIMARY KEY AUTO_INCREMENT,
    client_id INT NOT NULL,
    car_id INT NOT NULL,
    mechanic_id INT,
    request_date DATETIME NOT NULL,
    status VARCHAR(20) NOT NULL,
    description TEXT,
    total_amount DECIMAL(10,2),
    FOREIGN KEY (client_id) REFERENCES Client(client_id),
    FOREIGN KEY (car_id) REFERENCES Car(car_id),
    FOREIGN KEY (mechanic_id) REFERENCES Mechanic(mechanic_id)
);

CREATE TABLE RequestService (
    request_service_id INT PRIMARY KEY AUTO_INCREMENT,
    request_id INT NOT NULL,
    service_id INT NOT NULL,
    quantity INT NOT NULL,
    price_at_moment DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (request_id) REFERENCES Request(request_id),
    FOREIGN KEY (service_id) REFERENCES Service(service_id)
);

CREATE TABLE SparePart (
    part_id INT PRIMARY KEY AUTO_INCREMENT,
    part_name VARCHAR(100) NOT NULL,
    article VARCHAR(50),
    sale_price DECIMAL(10,2) NOT NULL
);


CREATE TABLE UsedPart (
    used_part_id INT PRIMARY KEY AUTO_INCREMENT,
    request_id INT NOT NULL,
    part_id INT NOT NULL,
    quantity INT NOT NULL,
    cost DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (request_id) REFERENCES Request(request_id),
    FOREIGN KEY (part_id) REFERENCES SparePart(part_id)
);


CREATE VIEW Vibor AS
SELECT 
    r.request_id,
    c.full_name AS client_name,
    car.brand,
    car.model,
    r.request_date,
    r.status,
    r.description
FROM Request r
JOIN Client c ON r.client_id = c.client_id
JOIN Car car ON r.car_id = car.car_id
WHERE r.status = 'В работе';

CREATE VIEW Rezult AS
SELECT 
    COUNT(*) AS total_requests,
    AVG(total_amount) AS avg_amount,
    MAX(total_amount) AS max_amount,
    MIN(total_amount) AS min_amount,
    SUM(total_amount) AS total_revenue
FROM Request
WHERE status = 'Выполнена';


CREATE VIEW Itog AS
SELECT 
    r.request_id,
    c.full_name AS client_name,
    car.brand,
    car.model,
    s.service_name,
    rs.quantity,
    rs.price_at_moment,
    (rs.quantity * rs.price_at_moment) AS service_total
FROM Request r
INNER JOIN Client c ON r.client_id = c.client_id
INNER JOIN Car car ON r.car_id = car.car_id
INNER JOIN RequestService rs ON r.request_id = rs.request_id
INNER JOIN Service s ON rs.service_id = s.service_id;