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


-- ====================================================================
-- КОНТРОЛЬНО-ОЦЕНОЧНОЕ ЗАДАНИЕ 1
-- Проектирование и заполнение базы данных (3-я нормальная форма)
-- ====================================================================

CREATE DATABASE IF NOT EXISTS trade_company;
USE trade_company;

-- Удаление таблиц, если они существовали ранее (с учетом внешних ключей)
DROP TABLE IF EXISTS sales;
DROP TABLE IF EXISTS deliveries;
DROP TABLE IF EXISTS managers;
DROP TABLE IF EXISTS products;
DROP TABLE IF EXISTS suppliers;

-- 1. ТАБЛИЦА: Поставщики
CREATE TABLE suppliers (
    k_Post INT AUTO_INCREMENT PRIMARY KEY COMMENT 'Код поставщика',
    n_post VARCHAR(150) NOT NULL COMMENT 'Наименование поставщика'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 2. ТАБЛИЦА: Номенклатура товаров
CREATE TABLE products (
    k_tov INT AUTO_INCREMENT PRIMARY KEY COMMENT 'Код товара',
    n_tov VARCHAR(150) NOT NULL COMMENT 'Наименование товара',
    kol INT NOT NULL DEFAULT 0 COMMENT 'Количество данного товара на складе'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 3. ТАБЛИЦА: Менеджеры
CREATE TABLE managers (
    km INT AUTO_INCREMENT PRIMARY KEY COMMENT 'Код менеджера',
    fio VARCHAR(150) NOT NULL COMMENT 'ФИО менеджера',
    oklad DECIMAL(10, 2) NOT NULL COMMENT 'Оклад менеджера'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 4. ТАБЛИЦА: Поставки (Сведения о поставках)
CREATE TABLE deliveries (
    id_delivery INT AUTO_INCREMENT PRIMARY KEY COMMENT 'Системный код записи поставки',
    k_Post INT NOT NULL COMMENT 'Код поставщика',
    k_tov INT NOT NULL COMMENT 'Код товара',
    data_past DATE NOT NULL COMMENT 'Дата поставки',
    v_post INT NOT NULL COMMENT 'Объем поставки',
    cena_post DECIMAL(10, 2) NOT NULL COMMENT 'Цена товара у данного поставщика',
    FOREIGN KEY (k_Post) REFERENCES suppliers(k_Post) ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY (k_tov) REFERENCES products(k_tov) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 5. ТАБЛИЦА: Продажи (Сведения о продажах)
CREATE TABLE sales (
    id_sale INT AUTO_INCREMENT PRIMARY KEY COMMENT 'Системный код записи продажи',
    km INT NOT NULL COMMENT 'Код менеджера',
    k_tov INT NOT NULL COMMENT 'Код товара',
    data_prod DATE NOT NULL COMMENT 'Дата продажи',
    v_prod INT NOT NULL COMMENT 'Объем продажи',
    cena_prod DECIMAL(10, 2) NOT NULL COMMENT 'Цена продажи (Цена поставки + 10%)',
    procent DECIMAL(5, 2) NOT NULL COMMENT 'Процент, начисляемый менеджеру за данный товар',
    FOREIGN KEY (km) REFERENCES managers(km) ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY (k_tov) REFERENCES products(k_tov) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- ====================================================================
-- ЗАПОЛНЕНИЕ ТАБЛИЦ ДАННЫМИ
-- ====================================================================

-- Заполнение таблицы Поставщиков (5 записей)
INSERT INTO suppliers (n_post) VALUES 
('ООО АвтоЗапчастьДеталь'),
('ЗАО Компонент-Плюс'),
('ИП Федоров В.М.'),
('ООО ДетальОптТорг'),
('ТД Моторс-Групп');

-- Заполнение Номенклатуры товаров (11 наименований - соблюдено условие >= 10)
INSERT INTO products (n_tov, kol) VALUES 
('Тормозные колодки передние', 45),
('Фильтр масляный', 120),
('Фильтр воздушный', 80),
('Свеча зажигания iridium', 200),
('Амортизатор передний', 14),
('Ремень ГРМ', 25),
('Моторное масло 5W-40 4л', 60),
('Диск тормозной', 22),
('Сцепление в сборе', 8),
('Насос водяной (помпа)', 19),
('Антифриз 5кг', 35);

-- Заполнение таблицы Менеджеров (5 записей - соблюдено условие >= 5)
INSERT INTO managers (fio, oklad) VALUES 
('Иванов Иван Иванович', 45000.00),
('Петров Петр Петрович', 48000.00),
('Сидоров Сидор Сидорович', 42000.00),
('Алексеев Алексей Алексеевич', 50000.00),
('Михайлов Михаил Михайлович', 46000.00);

-- Заполнение таблицы Поставок (11 записей - соблюдено условие >= 10)
INSERT INTO deliveries (k_Post, k_tov, data_past, v_post, cena_post) VALUES 
(1, 1, '2026-05-10', 50, 1200.00),
(1, 2, '2026-05-11', 150, 350.00),
(2, 3, '2026-05-12', 90, 450.00),
(3, 4, '2026-05-12', 250, 600.00),
(2, 5, '2026-05-14', 20, 2500.00),
(4, 6, '2026-05-15', 30, 1500.00),
(5, 7, '2026-05-16', 70, 2800.00),
(4, 8, '2026-05-18', 30, 1800.00),
(3, 9, '2026-05-19', 10, 6000.00),
(5, 10, '2026-05-20', 25, 1400.00),
(1, 11, '2026-05-21', 40, 800.00);

-- Заполнение таблицы Продаж (11 записей - соблюдено условие >= 10)
-- Примечание: cena_prod заполнена с точной наценкой в 10% от цены поставки (цена_поставки * 1.1)
INSERT INTO sales (km, k_tov, data_prod, v_prod, cena_prod, procent) VALUES 
(1, 1, '2026-06-01', 5, 1320.00, 5.0),   -- 1200 * 1.1 = 1320
(2, 2, '2026-06-01', 10, 385.00, 3.5),   -- 350 * 1.1 = 385
(3, 3, '2026-06-02', 4, 495.00, 4.0),    -- 450 * 1.1 = 495
(4, 4, '2026-06-03', 12, 660.00, 5.0),   -- 600 * 1.1 = 660
(5, 5, '2026-06-04', 2, 2750.00, 6.0),   -- 2500 * 1.1 = 2750
(1, 6, '2026-06-05', 3, 1650.00, 4.5),   -- 1500 * 1.1 = 1650
(2, 7, '2026-06-05', 6, 3080.00, 5.5),   -- 2800 * 1.1 = 3080
(3, 8, '2026-06-06', 4, 1980.00, 4.0),   -- 1800 * 1.1 = 1980
(4, 9, '2026-06-08', 1, 6600.00, 7.0),   -- 6000 * 1.1 = 6600
(5, 10, '2026-06-09', 3, 1540.00, 5.0),  -- 1400 * 1.1 = 1540
(1, 11, '2026-06-10', 2, 880.00, 3.0);   -- 800 * 1.1 = 880