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


CREATE DATABASE IF NOT EXISTS `bicycle_store_db` 
    DEFAULT CHARACTER SET utf8mb4 
    COLLATE utf8mb4_unicode_ci;

USE `bicycle_store_db`;

DROP TABLE IF EXISTS `OrderProduct`;
DROP TABLE IF EXISTS `Order`;
DROP TABLE IF EXISTS `Product`;
DROP TABLE IF EXISTS `User`;
DROP TABLE IF EXISTS `Role`;
DROP TABLE IF EXISTS `OrderStatus`;
DROP TABLE IF EXISTS `PickupPoint`;
DROP TABLE IF EXISTS `Category`;
DROP TABLE IF EXISTS `Manufacturer`;
DROP TABLE IF EXISTS `Supplier`;

CREATE TABLE `Role` (
    `RoleID` INT AUTO_INCREMENT PRIMARY KEY,
    `RoleName` VARCHAR(50) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `User` (
    `UserID` INT AUTO_INCREMENT PRIMARY KEY,
    `UserSurname` VARCHAR(100) NOT NULL,
    `UserName` VARCHAR(100) NOT NULL,
    `UserPatronymic` VARCHAR(100) NULL,
    `UserLogin` VARCHAR(100) NOT NULL UNIQUE,
    `UserPassword` VARCHAR(255) NOT NULL,
    `RoleID` INT NOT NULL,
    CONSTRAINT `FK_User_Role` FOREIGN KEY (`RoleID`) REFERENCES `Role` (`RoleID`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `Category` (
    `CategoryID` INT AUTO_INCREMENT PRIMARY KEY,
    `CategoryName` VARCHAR(100) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `Manufacturer` (
    `ManufacturerID` INT AUTO_INCREMENT PRIMARY KEY,
    `ManufacturerName` VARCHAR(100) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `Supplier` (
    `SupplierID` INT AUTO_INCREMENT PRIMARY KEY,
    `SupplierName` VARCHAR(100) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `Product` (
    `ProductID` INT AUTO_INCREMENT PRIMARY KEY,
    `ProductArticle` VARCHAR(50) NULL UNIQUE,
    `ProductName` VARCHAR(200) NOT NULL,
    `ProductDescription` TEXT NULL,
    `CategoryID` INT NOT NULL,
    `ManufacturerID` INT NOT NULL,
    `SupplierID` INT NOT NULL,
    `ProductCost` DECIMAL(10, 2) NOT NULL CHECK (`ProductCost` >= 0),
    `ProductUnit` VARCHAR(20) NOT NULL DEFAULT 'шт.',
    `ProductDiscountAmount` DECIMAL(5, 2) NOT NULL DEFAULT 0.00 CHECK (`ProductDiscountAmount` >= 0 AND `ProductDiscountAmount` <= 100),
    `ProductQuantityInStock` INT NOT NULL CHECK (`ProductQuantityInStock` >= 0),
    `ProductPhotoPath` VARCHAR(255) NULL,
    CONSTRAINT `FK_Product_Category` FOREIGN KEY (`CategoryID`) REFERENCES `Category` (`CategoryID`) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT `FK_Product_Manufacturer` FOREIGN KEY (`ManufacturerID`) REFERENCES `Manufacturer` (`ManufacturerID`) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT `FK_Product_Supplier` FOREIGN KEY (`SupplierID`) REFERENCES `Supplier` (`SupplierID`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `OrderStatus` (
    `StatusID` INT AUTO_INCREMENT PRIMARY KEY,
    `StatusName` VARCHAR(50) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `PickupPoint` (
    `PickupPointID` INT AUTO_INCREMENT PRIMARY KEY,
    `Address` VARCHAR(255) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `Order` (
    `OrderID` INT AUTO_INCREMENT PRIMARY KEY,
    `OrderArticle` VARCHAR(50) NOT NULL UNIQUE,
    `OrderDate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `OrderDeliveryDate` DATETIME NULL,
    `PickupPointID` INT NOT NULL,
    `StatusID` INT NOT NULL,
    `UserID` INT NULL,
    CONSTRAINT `FK_Order_PickupPoint` FOREIGN KEY (`PickupPointID`) REFERENCES `PickupPoint` (`PickupPointID`) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT `FK_Order_Status` FOREIGN KEY (`StatusID`) REFERENCES `OrderStatus` (`StatusID`) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT `FK_Order_User` FOREIGN KEY (`UserID`) REFERENCES `User` (`UserID`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `OrderProduct` (
    `OrderID` INT NOT NULL,
    `ProductID` INT NOT NULL,
    `Count` INT NOT NULL DEFAULT 1 CHECK (`Count` > 0),
    PRIMARY KEY (`OrderID`, `ProductID`),
    CONSTRAINT `FK_OrderProduct_Order` FOREIGN KEY (`OrderID`) REFERENCES `Order` (`OrderID`) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `FK_OrderProduct_Product` FOREIGN KEY (`ProductID`) REFERENCES `Product` (`ProductID`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;