Загрузка данных
CREATE DATABASE IF NOT EXISTS `electronics_shop`
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE `electronics_shop`;
-- 2. СПРАВОЧНАЯ ТАБЛИЦА РОЛЕЙ ПОЛЬЗОВАТЕЛЕЙ (user_roles)
-- Вместо ENUM в users, будем хранить ID роли отсюда
CREATE TABLE IF NOT EXISTS `user_roles` (
`id` TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(50) NOT NULL UNIQUE,
`description` VARCHAR(255),
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
-- 3. ТАБЛИЦА ПОЛЬЗОВАТЕЛЕЙ (users)
CREATE TABLE IF NOT EXISTS `users` (
`id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(50) NOT NULL UNIQUE,
`email` VARCHAR(100) NOT NULL UNIQUE,
`password_hash` VARCHAR(255) NOT NULL,
`name` VARCHAR(100), -- Для доставки
`phone` VARCHAR(20), -- Для доставки
`role_id` TINYINT UNSIGNED NOT NULL DEFAULT 2, -- По умолчанию роль 'user'
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (`role_id`) REFERENCES `user_roles`(`id`) ON DELETE RESTRICT
) ENGINE=InnoDB;
-- 4. СПРАВОЧНАЯ ТАБЛИЦА СТАТУСОВ ЗАКАЗА (order_statuses)
-- Вместо ENUM в orders, будем хранить ID статуса отсюда
CREATE TABLE IF NOT EXISTS `order_statuses` (
`id` TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(50) NOT NULL UNIQUE,
`description` VARCHAR(255),
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
-- 5. ТАБЛИЦА КАТЕГОРИЙ (categories)
CREATE TABLE IF NOT EXISTS `categories` (
`id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(100) NOT NULL UNIQUE,
`image_url` VARCHAR(255),
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
-- 6. ТАБЛИЦА ТОВАРОВ (products)
CREATE TABLE IF NOT EXISTS `products` (
`id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`category_id` INT UNSIGNED NOT NULL,
`name` VARCHAR(200) NOT NULL,
`description` TEXT,
`image_url` VARCHAR(255),
`price` DECIMAL(10, 2) UNSIGNED NOT NULL,
`stock_quantity` INT UNSIGNED DEFAULT 0,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`category_id`) REFERENCES `categories`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB;
-- 7. ТАБЛИЦА ЗАКАЗОВ (orders)
CREATE TABLE IF NOT EXISTS `orders` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`user_id` INT UNSIGNED NOT NULL,
`status_id` TINYINT UNSIGNED NOT NULL DEFAULT 1, -- По умолчанию статус 'new'
`total_price` DECIMAL(12, 2) UNSIGNED NOT NULL,
`name` VARCHAR(100) NOT NULL, -- Данные клиента из формы оформления
`phone` VARCHAR(20) NOT NULL,
`address` TEXT NOT NULL,
`comment` TEXT,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`status_id`) REFERENCES `order_statuses`(`id`) ON DELETE RESTRICT
) ENGINE=InnoDB;
-- 8. ТАБЛИЦА СОДЕРЖИМОГО ЗАКАЗА (order_items)
CREATE TABLE IF NOT EXISTS `order_items` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`order_id` BIGINT UNSIGNED NOT NULL,
`product_id` INT UNSIGNED NOT NULL,
`quantity` INT UNSIGNED NOT NULL,
`price_per_item` DECIMAL(10, 2) UNSIGNED NOT NULL, -- Цена на момент покупки
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`product_id`) REFERENCES `products`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB;
-- 9. НАПОЛНЕНИЕ СПРАВОЧНЫХ ТАБЛИЦ И ДАННЫХ
-- Заполняем справочник ролей (user_roles)
INSERT INTO `user_roles` (`id`, `name`, `description`) VALUES
(1, 'admin', 'Администратор системы. Полный доступ.'),
(2, 'user', 'Зарегистрированный покупатель.');
-- Заполняем справочник статусов заказа (order_statuses)
INSERT INTO `order_statuses` (`id`, `name`, `description`) VALUES
(1, 'new', 'Заказ только что создан, ожидает обработки.'),
(2, 'processing', 'Заказ собирается на складе.'),
(3, 'shipped', 'Заказ передан в службу доставки.'),
(4, 'completed', 'Заказ успешно доставлен и закрыт.'),
(5, 'canceled', 'Заказ отменен клиентом или администратором.');
-- Добавляем категории
INSERT INTO `categories` (`id`, `name`, `image_url`) VALUES
(1, 'Мониторы', 'https://via.placeholder.com/200x150?text=Мониторы'),
(2, 'Мыши', 'https://via.placeholder.com/200x150?text=Мыши'),
(3, 'Клавиатуры', 'https://via.placeholder.com/200x150?text=Клавиатуры'),
(4, 'Наушники', 'https://via.placeholder.com/200x150?text=Наушники');
-- Добавляем товары (ссылка на category_id)
INSERT INTO `products` (`id`, `category_id`, `name`, `description`, `image_url`, `price`, `stock_quantity`) VALUES
(1, 1, 'Монитор AOC 24"', 'Отличный монитор для работы и игр.', 'https://via.placeholder.com/300x200?text=AOC+24"', 15990, 10),
(2, 1, 'Монитор Samsung 27"', 'Большой и яркий экран.', 'https://via.placeholder.com/300x200?text=Samsung+27"', 18990, 5),
(3, 2, 'Мышь Razer DeathAdder', 'Игровая мышь с высокой точностью.', 'https://via.placeholder.com/300x200?text=Razer+Mouse', 4990, 50),
(4, 3, 'Клавиатура Logitech K120', 'Надежная клавиатура для офиса.', 'https://via.placeholder.com/300x200?text=Logitech+K120', 3490, 30),
(5, 4, 'Наушники Sony WH-1000XM4', 'Беспроводные наушники с шумоподавлением.', 'https://via.placeholder.com/300x200?text=Sony+WH-1000XM4', 24990, 15);
-- Добавляем администратора (пароль: admin123)
INSERT INTO `users` (`id`, `username`, `email`, `password_hash`, `role_id`) VALUES
(1, 'admin', 'admin@shop.ru', '$2y$10$Nf4JrXQlXq9h4Z5v6b7c8OeaVrJ7Yz8K9L0M1N2P3Q4R5S6T7U8V9W', 1);
Ключевые изменения и преимущес