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


USE shop3;
GO

---------------------------------------------------------
-- 1. ПОЛНАЯ ОЧИСТКА (Убираем старые данные, сохраняя структуру)
---------------------------------------------------------
DELETE FROM purchase_analytics;
DELETE FROM purchase_list;
DELETE FROM orders;
DELETE FROM discounts;
DELETE FROM stock;
DELETE FROM product_prices;
DELETE FROM products;
DELETE FROM buyers;
DELETE FROM categories;
DELETE FROM payment_methods;
DELETE FROM order_statuses;
GO

-- Сбрасываем счетчики ID в ноль
DBCC CHECKIDENT ('categories', RESEED, 0);
DBCC CHECKIDENT ('products', RESEED, 0);
DBCC CHECKIDENT ('buyers', RESEED, 0);
GO

---------------------------------------------------------
-- 2. ЗАПОЛНЕНИЕ СПРАВОЧНИКОВ
---------------------------------------------------------
INSERT INTO order_statuses (name) VALUES (N'Оформлен'), (N'Доставлен'), (N'Отменён');
INSERT INTO payment_methods (name) VALUES (N'Карта'), (N'Наличные'), (N'Крипта');
INSERT INTO categories (name) VALUES 
(N'Смартфоны'), (N'Ноутбуки'), (N'Бытовая техника'), (N'Аудио'), (N'Периферия');
GO

---------------------------------------------------------
-- 3. ЗАПОЛНЕНИЕ ТОВАРОВ (ID назначит сама база)
---------------------------------------------------------
INSERT INTO products (name, category_id, specification) VALUES 
(N'iPhone 15 Pro', 1, N'Титановый корпус, чип A17 Pro, 120Гц экран.'),
(N'Samsung S24 Ultra', 1, N'Камера 200Мп, встроенный стилус, ИИ-функции.'),
(N'MacBook Air M3', 2, N'8-ядерный чип M3, 13 дюймов, бесшумный.'),
(N'Sony WH-1000XM5', 4, N'Лучшее шумоподавление, 30 часов работы.'),
(N'Клавиатура Keychron K2', 5, N'Механика, RGB, Bluetooth/Провод.'),
(N'Кофемашина DeLonghi', 3, N'Автоматический капучинатор, 15 бар.');
GO

---------------------------------------------------------
-- 4. ИСТОРИЯ ЦЕН И СКЛАДА (Для всех созданных товаров)
---------------------------------------------------------
-- Цены
INSERT INTO product_prices (product_id, price)
SELECT id, CASE 
    WHEN name LIKE N'%iPhone%' THEN 120000 
    WHEN name LIKE N'%Samsung%' THEN 110000
    WHEN name LIKE N'%MacBook%' THEN 140000
    WHEN name LIKE N'%Sony%' THEN 35000
    WHEN name LIKE N'%Keychron%' THEN 12000
    ELSE 45000 END
FROM products;

-- Склад (завозим по 50 штук)
INSERT INTO stock (product_id, quantity)
SELECT id, 50 FROM products;
GO

---------------------------------------------------------
-- 5. ПОКУПАТЕЛИ И ИХ СКИДКИ
---------------------------------------------------------
INSERT INTO buyers (name_client, payment_method_id) VALUES 
(N'Иван Петров', 1), (N'Мария Сидорова', 1), (N'Алексей Козлов', 2);

-- Выдаем скидки (Последняя по дате будет актуальной)
INSERT INTO discounts (buyer_id, discount_percent, set_date)
SELECT id, 10, '2026-05-01' FROM buyers; -- Сначала всем по 10%

INSERT INTO discounts (buyer_id, discount_percent, set_date)
VALUES (1, 20, GETDATE()); -- Ивану подняли до 20% сегодня
GO

---------------------------------------------------------
-- 6. ЗАКАЗЫ (Триггер сам посчитает цену со скидкой и заполнит аналитику)
---------------------------------------------------------
-- Иван (ID 1) покупает iPhone (ID 1) и Клавиатуру (ID 5)
INSERT INTO orders (product_id, buyer_id, quantity) VALUES (1, 1, 1), (5, 1, 1);
-- Мария (ID 2) покупает Кофемашину (ID 6)
INSERT INTO orders (product_id, buyer_id, quantity) VALUES (6, 2, 1);
GO

---------------------------------------------------------
-- 7. ПРОВЕРКА: ПОКАЗЫВАЕМ ТОВАР, БАЗУ И ЦЕНУ СО СКИДКОЙ
---------------------------------------------------------
SELECT 
    o.id AS [№ Заказа],
    b.name_client AS [Кто купил],
    p.name AS [Что купил],
    (SELECT TOP 1 price FROM product_prices WHERE product_id = p.id ORDER BY set_date DESC) AS [Базовая цена],
    o.price_at_order AS [Цена со скидкой],
    (SELECT TOP 1 discount_percent FROM discounts WHERE buyer_id = b.id ORDER BY set_date DESC) AS [% Скидки],
    o.order_price AS [Итого]
FROM orders o
JOIN buyers b ON o.buyer_id = b.id
JOIN products p ON o.product_id = p.id;

-- Проверка аналитики
SELECT * FROM purchase_analytics;