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


-- ========== ЗАДАНИЯ 1-2 ==========
PRAGMA foreign_keys = ON;

-- ========== ЗАДАНИЯ 3-5 ==========
DROP TABLE IF EXISTS fine;
DROP TABLE IF EXISTS rental;
DROP TABLE IF EXISTS car;
DROP TABLE IF EXISTS user_account;

CREATE TABLE user_account (
    user_id INTEGER PRIMARY KEY AUTOINCREMENT,
    full_name TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE,
    phone TEXT UNIQUE,
    created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
);

-- ========== ЗАДАНИЯ 6-9 ==========
CREATE TABLE car (
    car_id INTEGER PRIMARY KEY AUTOINCREMENT,
    plate_no TEXT NOT NULL UNIQUE,
    brand TEXT NOT NULL,
    model TEXT NOT NULL,
    year INTEGER NOT NULL CHECK (year BETWEEN 2000 AND 2026),
    odometer_km INTEGER NOT NULL DEFAULT 0 CHECK (odometer_km > 0)
);

-- ========== ЗАДАНИЯ 10-17 ==========
CREATE TABLE rental (
    rental_id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    car_id INTEGER NOT NULL,
    start_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
    end_at TEXT,
    status TEXT NOT NULL CHECK (status IN ('NEW', 'ACTIVE', 'FINISHED', 'CANCELLED')),
    cost_amount NUMERIC NOT NULL DEFAULT 0 CHECK (cost_amount >= 0),
    FOREIGN KEY (user_id) REFERENCES user_account(user_id),
    FOREIGN KEY (car_id) REFERENCES car(car_id),
    CHECK (end_at IS NULL OR end_at > start_at)
);

-- ========== ЗАДАНИЯ 18-21 ==========
CREATE TABLE fine (
    fine_id INTEGER PRIMARY KEY AUTOINCREMENT,
    rental_id INTEGER NOT NULL,
    amount NUMERIC NOT NULL CHECK (amount >= 0),
    reason TEXT NOT NULL,
    FOREIGN KEY (rental_id) REFERENCES rental(rental_id)
);

-- ========== ЗАДАНИЕ 22 ==========
PRAGMA table_info(user_account);
PRAGMA table_info(car);
PRAGMA table_info(rental);
PRAGMA table_info(fine);

-- ========== ЗАДАНИЕ 23 ==========
PRAGMA foreign_key_list(rental);
PRAGMA foreign_key_list(fine);

-- ========== ЗАДАНИЕ 24 ==========
INSERT INTO user_account (full_name, email, phone) VALUES 
    ('Иван Петров', 'ivan@example.com', '+7-900-123-45-67'),
    ('Мария Сидорова', 'maria@example.com', '+7-900-987-65-43');

DELETE FROM user_account WHERE email = 'maria@example.com';

-- ========== ЗАДАНИЕ 25 ==========
INSERT INTO car (plate_no, brand, model, year, odometer_km) VALUES 
    ('A123BC', 'Toyota', 'Camry', 2020, 15000),
    ('B456DE', 'Honda', 'Civic', 2022, 5000);

-- ========== ЗАДАНИЕ 26 ==========
INSERT INTO rental (user_id, car_id, status, cost_amount) VALUES 
    (1, 1, 'ACTIVE', 5000);

-- ========== ЗАДАНИЕ 27 ==========
INSERT INTO rental (user_id, car_id, start_at, end_at, status, cost_amount) VALUES 
    (1, 2, '2025-01-01 10:00:00', '2025-01-05 18:00:00', 'FINISHED', 20000);

-- ========== ЗАДАНИЕ 28 ==========
INSERT INTO fine (rental_id, amount, reason) VALUES 
    (2, 500, 'Возврат с опозданием');

-- ========== ЗАДАНИЕ 29 ==========
-- INSERT INTO user_account (full_name, email, phone) VALUES 
--     ('Петр Сидоров', 'ivan@example.com', '+7-900-111-22-33');

-- ========== ЗАДАНИЕ 30 ==========
-- INSERT INTO car (plate_no, brand, model, year, odometer_km) VALUES 
--     ('C789FG', 'Ford', 'Focus', 1999, 10000);

-- ========== ЗАДАНИЕ 31 ==========
-- INSERT INTO car (plate_no, brand, model, year, odometer_km) VALUES 
--     ('C789FG', 'Ford', 'Focus', 2015, -10);

-- ========== ЗАДАНИЕ 32 ==========
-- INSERT INTO rental (user_id, car_id, status, cost_amount) VALUES 
--     (1, 1, 'IN_PROGRESS', 3000);

-- ========== ЗАДАНИЕ 33 ==========
-- INSERT INTO rental (user_id, car_id, start_at, end_at, status, cost_amount) VALUES 
--     (1, 1, '2025-02-01 10:00:00', '2025-01-30 18:00:00', 'FINISHED', 10000);

-- ========== ЗАДАНИЕ 34 ==========
-- INSERT INTO fine (rental_id, amount, reason) VALUES 
--     (999, 1000, 'Штраф за несуществующую аренду');

-- ========== ЗАДАНИЕ 35 ==========
-- Итоговый SQL-файл сохранён