-- Создание базы данных
CREATE DATABASE IF NOT EXISTS bicycle_shop;
USE bicycle_shop;
-- 1. Таблица Ролей
CREATE TABLE Roles (
role_id INT AUTO_INCREMENT PRIMARY KEY,
role_name VARCHAR(50) NOT NULL UNIQUE
);
-- 2. Таблица Пользователей
CREATE TABLE Users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
login VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
full_name VARCHAR(255) NOT NULL,
role_id INT NOT NULL,
FOREIGN KEY (role_id) REFERENCES Roles(role_id)
);
-- 3. Таблица Категорий
CREATE TABLE Categories (
category_id INT AUTO_INCREMENT PRIMARY KEY,
category_name VARCHAR(100) NOT NULL UNIQUE
);
-- 4. Таблица Производителей
CREATE TABLE Manufacturers (
manufacturer_id INT AUTO_INCREMENT PRIMARY KEY,
manufacturer_name VARCHAR(100) NOT NULL UNIQUE
);
-- 5. Таблица Поставщиков
CREATE TABLE Suppliers (
supplier_id INT AUTO_INCREMENT PRIMARY KEY,
supplier_name VARCHAR(100) NOT NULL UNIQUE
);
-- 6. Таблица Товаров (Велосипеды)
CREATE TABLE Products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
description TEXT,
price DECIMAL(10, 2) NOT NULL,
unit VARCHAR(20) DEFAULT 'шт.',
photo_path VARCHAR(255),
category_id INT,
manufacturer_id INT,
supplier_id INT,
FOREIGN KEY (category_id) REFERENCES Categories(category_id),
FOREIGN KEY (manufacturer_id) REFERENCES Manufacturers(manufacturer_id),
FOREIGN KEY (supplier_id) REFERENCES Suppliers(supplier_id)
);
-- 7. Таблица Складов
CREATE TABLE Warehouses (
warehouse_id INT AUTO_INCREMENT PRIMARY KEY,
warehouse_name VARCHAR(100) NOT NULL,
address VARCHAR(255)
);
-- 8. Таблица Остатков на складах (Реализация "актуальной информации об остатках")
CREATE TABLE Stocks (
stock_id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT NOT NULL,
warehouse_id INT NOT NULL,
quantity INT NOT NULL DEFAULT 0,
UNIQUE KEY unique_product_warehouse (product_id, warehouse_id),
FOREIGN KEY (product_id) REFERENCES Products(product_id) ON DELETE CASCADE,
FOREIGN KEY (warehouse_id) REFERENCES Warehouses(warehouse_id) ON DELETE CASCADE
);
-- 9. Таблица Заказов
CREATE TABLE Orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(50) DEFAULT 'Новый',
user_id INT NOT NULL,
FOREIGN KEY (user_id) REFERENCES Users(user_id)
);
-- 10. Таблица Состава Заказа
CREATE TABLE OrderItems (
order_item_id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
price_at_purchase DECIMAL(10, 2) NOT NULL, -- Фиксируем цену на момент заказа
FOREIGN KEY (order_id) REFERENCES Orders(order_id) ON DELETE CASCADE,
FOREIGN KEY (product_id) REFERENCES Products(product_id)
);
-- Наполнение справочника ролей (для теста)
INSERT INTO Roles (role_name) VALUES ('Гость'), ('Клиент'), ('Менеджер'), ('Администратор');