-- 1. Таблица Пользователей (Администраторы, Менеджеры, Клиенты)
-- По ТЗ: логин, фамилия, имя, отчество + добавлена роль для разграничения прав
CREATE TABLE Users (
UserID INT PRIMARY KEY IDENTITY(1,1),
Login VARCHAR(50) NOT NULL UNIQUE, -- ТЗ: "только по логину"
LastName NVARCHAR(50) NOT NULL, -- Фамилия
FirstName NVARCHAR(50) NOT NULL, -- Имя
MiddleName NVARCHAR(50), -- Отчество
Role VARCHAR(30) NOT NULL CHECK (Role IN ('Администратор', 'Менеджер', 'Авторизованный пользователь'))
);
-- 2. Таблица Категорий
-- По ТЗ: категория, подкатегория
CREATE TABLE Categories (
CategoryID INT PRIMARY KEY IDENTITY(1,1),
CategoryName NVARCHAR(100) NOT NULL,
ParentCategoryID INT NULL, -- Ссылка на саму себя для реализации подкатегорий
FOREIGN KEY (ParentCategoryID) REFERENCES Categories(CategoryID)
);
-- 3. Таблица Товаров (Модели обуви)
-- По ТЗ: наименование, изображение, производство, состав, описание, цена
CREATE TABLE Shoes (
ShoeID INT PRIMARY KEY IDENTITY(1,1),
CategoryID INT NOT NULL,
Name NVARCHAR(100) NOT NULL, -- наименование
Production NVARCHAR(100), -- производство
Composition NVARCHAR(200), -- состав
Description NVARCHAR(500), -- описание
Image NVARCHAR(255), -- изображение (путь к файлу)
Price DECIMAL(10, 2) NOT NULL, -- цена
FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID)
);
-- 4. Таблица Размерного ряда и остатков (Склад)
-- По ТЗ: "доступное для заказа количество товарных позиций (сочетаний модели и размера)"
CREATE TABLE ShoeStock (
ShoeID INT NOT NULL,
Size INT NOT NULL, -- Размерный ряд
Quantity INT NOT NULL DEFAULT 0, -- Количество (доступное для заказа)
PRIMARY KEY (ShoeID, Size), -- Составной ключ: одна модель + один размер = уникальная позиция
FOREIGN KEY (ShoeID) REFERENCES Shoes(ShoeID) ON DELETE CASCADE
);
-- 5. Таблица Заказов
-- По ТЗ: дата заказа, фамилия, имя, отчество клиента, итоговая сумма
CREATE TABLE Orders (
OrderID INT PRIMARY KEY IDENTITY(1,1),
OrderDate DATETIME NOT NULL DEFAULT GETDATE(), -- дата заказа
UserID INT NULL, -- Может быть NULL, если заказ оформляет менеджер на гостя
ClientFullName NVARCHAR(150) NOT NULL, -- ФИО клиента (текстом, как требует ТЗ)
TotalSum DECIMAL(10, 2) NOT NULL DEFAULT 0, -- Итоговая сумма по заказу
FOREIGN KEY (UserID) REFERENCES Users(UserID)
);
-- 6. Таблица Состава Заказа (Товарные позиции)
-- По ТЗ: товарная позиция, количество, цена за единицу товара
CREATE TABLE OrderItems (
OrderItemID INT PRIMARY KEY IDENTITY(1,1),
OrderID INT NOT NULL,
ShoeID INT NOT NULL,
Size INT NOT NULL, -- Какой именно размер заказали
Quantity INT NOT NULL, -- Количество
Price DECIMAL(10, 2) NOT NULL, -- Цена за единицу товара (фиксируется на момент заказа)
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID) ON DELETE CASCADE,
FOREIGN KEY (ShoeID, Size) REFERENCES ShoeStock(ShoeID, Size) -- Ссылка на конкретную позицию на складе
);