Добавить в корзинуПозвонить
Найти в Дзене
ISP32DEMO

bd

-- Создание и использование схемы DROP SCHEMA IF EXISTS `shoe_store_db`; CREATE SCHEMA `shoe_store_db` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE `shoe_store_db`; -- 1. Роли CREATE TABLE roles ( role_id INT AUTO_INCREMENT PRIMARY KEY, role_name VARCHAR(50) NOT NULL UNIQUE ) ENGINE=InnoDB; -- 2. Пользователи CREATE TABLE users ( user_id INT AUTO_INCREMENT PRIMARY KEY, login VARCHAR(50) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL, role_id INT NOT NULL, full_name VARCHAR(150) NOT NULL, FOREIGN KEY (role_id) REFERENCES roles(role_id) ON DELETE RESTRICT ) ENGINE=InnoDB; -- 3. Справочники (3НФ) CREATE TABLE categories ( category_id INT AUTO_INCREMENT PRIMARY KEY, category_name VARCHAR(100) NOT NULL UNIQUE ) ENGINE=InnoDB; CREATE TABLE manufacturers ( manufacturer_id INT AUTO_INCREMENT PRIMARY KEY, manufacturer_name VARCHAR(150) NOT NULL UNIQUE ) ENGINE=InnoDB; CREATE TABLE suppliers ( supplier_id INT AUTO_INCREMENT PRIMARY KEY, supplier_name VARCHAR(150) NOT NULL

-- Создание и использование схемы

DROP SCHEMA IF EXISTS `shoe_store_db`;

CREATE SCHEMA `shoe_store_db` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

USE `shoe_store_db`;

-- 1. Роли

CREATE TABLE roles (

role_id INT AUTO_INCREMENT PRIMARY KEY,

role_name VARCHAR(50) NOT NULL UNIQUE

) ENGINE=InnoDB;

-- 2. Пользователи

CREATE TABLE users (

user_id INT AUTO_INCREMENT PRIMARY KEY,

login VARCHAR(50) NOT NULL UNIQUE,

password_hash VARCHAR(255) NOT NULL,

role_id INT NOT NULL,

full_name VARCHAR(150) NOT NULL,

FOREIGN KEY (role_id) REFERENCES roles(role_id) ON DELETE RESTRICT

) ENGINE=InnoDB;

-- 3. Справочники (3НФ)

CREATE TABLE categories (

category_id INT AUTO_INCREMENT PRIMARY KEY,

category_name VARCHAR(100) NOT NULL UNIQUE

) ENGINE=InnoDB;

CREATE TABLE manufacturers (

manufacturer_id INT AUTO_INCREMENT PRIMARY KEY,

manufacturer_name VARCHAR(150) NOT NULL UNIQUE

) ENGINE=InnoDB;

CREATE TABLE suppliers (

supplier_id INT AUTO_INCREMENT PRIMARY KEY,

supplier_name VARCHAR(150) NOT NULL UNIQUE

) ENGINE=InnoDB;

-- 4. Товары

CREATE TABLE products (

product_id INT AUTO_INCREMENT PRIMARY KEY,

product_name VARCHAR(200) NOT NULL,

category_id INT,

description TEXT,

manufacturer_id INT,

supplier_id INT,

price DECIMAL(10, 2) NOT NULL CHECK (price >= 0),

unit VARCHAR(20) NOT NULL,

quantity INT NOT NULL DEFAULT 0 CHECK (quantity >= 0),

discount DECIMAL(5, 2) DEFAULT 0.00 CHECK (discount >= 0 AND discount <= 100),

image_path VARCHAR(255) DEFAULT 'picture.png',

FOREIGN KEY (category_id) REFERENCES categories(category_id) ON DELETE SET NULL,

FOREIGN KEY (manufacturer_id) REFERENCES manufacturers(manufacturer_id) ON DELETE SET NULL,

FOREIGN KEY (supplier_id) REFERENCES suppliers(supplier_id) ON DELETE SET NULL

) ENGINE=InnoDB;

-- 5. Заказы

CREATE TABLE orders (

order_id INT AUTO_INCREMENT PRIMARY KEY,

user_id INT,

order_date DATETIME DEFAULT CURRENT_TIMESTAMP,

status VARCHAR(50) DEFAULT 'Новый',

FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE SET NULL

) ENGINE=InnoDB;

-- 6. Позиции заказа (Защита от удаления товара через RESTRICT)

CREATE TABLE order_items (

order_item_id INT AUTO_INCREMENT PRIMARY KEY,

order_id INT NOT NULL,

product_id INT NOT NULL,

quantity INT NOT NULL CHECK (quantity > 0),

FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE,

FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE RESTRICT

) ENGINE=InnoDB;

-- ================= ДАННЫЕ ДЛЯ ТЕСТИРОВАНИЯ =================

INSERT INTO roles (role_name) VALUES ('guest'), ('client'), ('manager'), ('admin');

-- Пароль для всех: 123 (в реальном проекте хешируется, здесь для простоты открытый текст или простой хэш)

INSERT INTO users (login, password_hash, role_id, full_name) VALUES

('admin', '123', 4, 'Иванов И.И. (Администратор)'),

('manager', '123', 3, 'Петров П.П. (Менеджер)'),

('client', '123', 2, 'Сидоров С.С. (Клиент)');

INSERT INTO categories (category_name) VALUES ('Кроссовки'), ('Ботинки'), ('Туфли');

INSERT INTO manufacturers (manufacturer_name) VALUES ('Nike'), ('Adidas'), ('Ecco');

INSERT INTO suppliers (supplier_name) VALUES ('ООО "Спортмастер"'), ('ИП Смирнов'), ('ООО "ОбувьОпт"');

-- Товары (разные сценарии для проверки подсветки)

INSERT INTO products (product_name, category_id, description, manufacturer_id, supplier_id, price, unit, quantity, discount, image_path) VALUES

('Кроссовки Air Max', 1, 'Классические беговые', 1, 1, 10000.00, 'пара', 50, 20.00, 'picture.png'), -- Скидка > 15% (зеленый)

('Ботинки Winter Pro', 2, 'Зимние, утепленные', 3, 2, 15000.00, 'пара', 0, 0.00, 'picture.png'), -- Нет на складе (голубой)

('Туфли Classic', 3, 'Деловые', 3, 3, 8000.00, 'пара', 10, 10.00, 'picture.png'); -- Обычная скидка

-- Заказ, чтобы проверить запрет на удаление

INSERT INTO orders (user_id, status) VALUES (2, 'В обработке');

INSERT INTO order_items (order_id, product_id, quantity) VALUES (1, 1, 2); -- Товар 1 в заказе!