NRPC/nrpc_db/reserve/pc_parts_new 20210407 1947.sql
2021-06-28 01:45:20 +03:00

555 lines
No EOL
13 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--
-- Скрипт сгенерирован Devart dbForge Studio 2019 for MySQL, Версия 8.1.22.0
-- Домашняя страница продукта: http://www.devart.com/ru/dbforge/mysql/studio
-- Дата скрипта: 07.04.2021 19:47:04
-- Версия сервера: 5.7.25
-- Версия клиента: 4.1
--
--
-- Отключение внешних ключей
--
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
--
-- Установить режим SQL (SQL mode)
--
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
--
-- Установка кодировки, с использованием которой клиент будет посылать запросы на сервер
--
SET NAMES 'utf8';
--
-- Удалить функцию `addNewUser`
--
DROP FUNCTION IF EXISTS addNewUser;
--
-- Удалить таблицу `ord`
--
DROP TABLE IF EXISTS ord;
--
-- Удалить функцию `addNewOrd`
--
DROP FUNCTION IF EXISTS addNewOrd;
--
-- Удалить функцию `addNewPart`
--
DROP FUNCTION IF EXISTS addNewPart;
--
-- Удалить функцию `modifySupply`
--
DROP FUNCTION IF EXISTS modifySupply;
--
-- Удалить таблицу `part_shop`
--
DROP TABLE IF EXISTS part_shop;
--
-- Удалить таблицу `shop`
--
DROP TABLE IF EXISTS shop;
--
-- Удалить таблицу `order_info`
--
DROP TABLE IF EXISTS order_info;
--
-- Удалить таблицу `status`
--
DROP TABLE IF EXISTS status;
--
-- Удалить таблицу `user`
--
DROP TABLE IF EXISTS user;
--
-- Удалить таблицу `part`
--
DROP TABLE IF EXISTS part;
--
-- Удалить таблицу `category`
--
DROP TABLE IF EXISTS category;
--
-- Удалить таблицу `supplier`
--
DROP TABLE IF EXISTS supplier;
--
-- Создать таблицу `supplier`
--
CREATE TABLE supplier (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
address varchar(255) NOT NULL,
phone varchar(255) NOT NULL,
email varchar(255) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 3,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `name` для объекта типа таблица `supplier`
--
ALTER TABLE supplier
ADD UNIQUE INDEX name (name);
--
-- Создать таблицу `category`
--
CREATE TABLE category (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 8,
AVG_ROW_LENGTH = 2340,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `name` для объекта типа таблица `category`
--
ALTER TABLE category
ADD UNIQUE INDEX name (name);
--
-- Создать таблицу `part`
--
CREATE TABLE part (
id int(11) NOT NULL AUTO_INCREMENT,
upc bigint(12) NOT NULL,
name varchar(255) NOT NULL,
price decimal(19, 2) NOT NULL,
id_category int(11) NOT NULL,
id_supplier int(11) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 19,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `upc` для объекта типа таблица `part`
--
ALTER TABLE part
ADD UNIQUE INDEX upc (upc);
--
-- Создать внешний ключ
--
ALTER TABLE part
ADD CONSTRAINT FK_part_category_id FOREIGN KEY (id_category)
REFERENCES category (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Создать внешний ключ
--
ALTER TABLE part
ADD CONSTRAINT FK_part_supplier_id FOREIGN KEY (id_supplier)
REFERENCES supplier (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Создать таблицу `user`
--
CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT,
login varchar(255) NOT NULL,
password varchar(255) NOT NULL,
name varchar(255) NOT NULL,
surname varchar(255) NOT NULL,
phone varchar(255) NOT NULL,
email varchar(50) NOT NULL,
address varchar(255) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 5,
AVG_ROW_LENGTH = 5461,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `email` для объекта типа таблица `user`
--
ALTER TABLE user
ADD UNIQUE INDEX email (email);
--
-- Создать индекс `login` для объекта типа таблица `user`
--
ALTER TABLE user
ADD UNIQUE INDEX login (login);
--
-- Создать индекс `phone` для объекта типа таблица `user`
--
ALTER TABLE user
ADD UNIQUE INDEX phone (phone);
--
-- Создать таблицу `status`
--
CREATE TABLE status (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 4,
AVG_ROW_LENGTH = 8192,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `name` для объекта типа таблица `status`
--
ALTER TABLE status
ADD UNIQUE INDEX name (name);
--
-- Создать таблицу `order_info`
--
CREATE TABLE order_info (
id int(11) NOT NULL AUTO_INCREMENT,
id_user int(11) NOT NULL,
id_status int(11) NOT NULL,
date datetime NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 4,
AVG_ROW_LENGTH = 16384,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать внешний ключ
--
ALTER TABLE order_info
ADD CONSTRAINT FK_ord_status_id FOREIGN KEY (id_status)
REFERENCES status (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Создать внешний ключ
--
ALTER TABLE order_info
ADD CONSTRAINT FK_ord_user_id FOREIGN KEY (id_user)
REFERENCES user (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Создать таблицу `shop`
--
CREATE TABLE shop (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
address varchar(255) NOT NULL,
phone varchar(255) NOT NULL,
email varchar(255) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 3,
AVG_ROW_LENGTH = 8192,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `UK_shop` для объекта типа таблица `shop`
--
ALTER TABLE shop
ADD UNIQUE INDEX UK_shop (name, address);
--
-- Создать таблицу `part_shop`
--
CREATE TABLE part_shop (
id int(11) NOT NULL AUTO_INCREMENT,
id_part int(11) NOT NULL,
id_shop int(11) NOT NULL,
count int(11) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 9,
AVG_ROW_LENGTH = 2048,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `UK_stock` для объекта типа таблица `part_shop`
--
ALTER TABLE part_shop
ADD UNIQUE INDEX UK_stock (id_part, id_shop);
--
-- Создать внешний ключ
--
ALTER TABLE part_shop
ADD CONSTRAINT FK_part_shop_shop_id FOREIGN KEY (id_shop)
REFERENCES shop (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Создать внешний ключ
--
ALTER TABLE part_shop
ADD CONSTRAINT FK_stock_part_id FOREIGN KEY (id_part)
REFERENCES part (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
DELIMITER $$
--
-- Создать функцию `modifySupply`
--
CREATE FUNCTION modifySupply (part_id int, shop_id int, supply int)
RETURNS varchar(255) CHARSET utf8
BEGIN
UPDATE part_shop ps
SET ps.count = ps.count + supply
WHERE ps.id_part = part_id
AND ps.id_shop = shop_id;
RETURN "Успешно обновлено количество товара на складе";
END
$$
--
-- Создать функцию `addNewPart`
--
CREATE FUNCTION addNewPart (upc bigint(12), name varchar(255), category_id int, supplier_id int, price dec(11, 2))
RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE part_id int;
DECLARE shop_id int;
DECLARE n int;
DECLARE i int;
INSERT IGNORE INTO part
VALUES (NULL, upc, name, price, category_id, supplier_id);
SELECT
LAST_INSERT_ID() INTO part_id;
SELECT
COUNT(*)
FROM shop s INTO n;
SET i = 1;
WHILE i <= n DO
INSERT IGNORE INTO part_shop
VALUES (NULL, part_id, i, 0);
SET i = i + 1;
END WHILE;
RETURN "Товар успешно добавлен в бд";
END
$$
--
-- Создать функцию `addNewOrd`
--
CREATE FUNCTION addNewOrd (user_id int, part_id int, shop_id int, ord_count int)
RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE order_info_id int;
DECLARE part_shop_id int;
DECLARE part_count int;
SELECT
ps.id,
ps.count INTO part_shop_id, part_count
FROM part_shop ps
WHERE ps.id_part = part_id
AND ps.id_shop = shop_id;
IF (part_count < ord_count) THEN
RETURN "На складе не хватает товара";
END IF;
INSERT IGNORE INTO order_info
VALUES (NULL, user_id, 1, CURDATE());
SELECT
LAST_INSERT_ID() INTO order_info_id;
UPDATE part_shop ps
SET ps.count = ps.count - ord_count
WHERE ps.id = part_shop_id;
INSERT IGNORE INTO ord
VALUE (NULL, order_info_id, part_shop_id, ord_count);
RETURN "Заказ успешно оформлен!";
END
$$
DELIMITER ;
--
-- Создать таблицу `ord`
--
CREATE TABLE ord (
id int(11) NOT NULL AUTO_INCREMENT,
id_order_info int(11) NOT NULL,
id_part_shop int(11) NOT NULL,
count int(11) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 2,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `FK_ord_parts_ord_id` для объекта типа таблица `ord`
--
ALTER TABLE ord
ADD INDEX FK_ord_parts_ord_id (id_order_info);
--
-- Создать индекс `FK_ord_parts_part_id` для объекта типа таблица `ord`
--
ALTER TABLE ord
ADD INDEX FK_ord_parts_part_id (id_part_shop);
--
-- Создать индекс `UK_ord` для объекта типа таблица `ord`
--
ALTER TABLE ord
ADD UNIQUE INDEX UK_ord (id_order_info, id_part_shop);
--
-- Создать внешний ключ
--
ALTER TABLE ord
ADD CONSTRAINT FK_ord_order_info_id FOREIGN KEY (id_order_info)
REFERENCES order_info (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Создать внешний ключ
--
ALTER TABLE ord
ADD CONSTRAINT FK_ord_part_shop_id FOREIGN KEY (id_part_shop)
REFERENCES part_shop (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
DELIMITER $$
--
-- Создать функцию `addNewUser`
--
CREATE FUNCTION addNewUser (login varchar(255), password varchar(255), name varchar(255), surname varchar(255), phone varchar(255), email varchar(255), address varchar(255))
RETURNS varchar(255) CHARSET utf8
BEGIN
INSERT IGNORE INTO user
VALUES (NULL, login, password, name, surname, phone, email, address);
RETURN "Новый пользователь успешно создан";
END
$$
DELIMITER ;
--
-- Вывод данных для таблицы supplier
--
INSERT INTO supplier VALUES
(1, 'Compart', 'ул. Гидротехников, д. 155', '+7 (911) 324-03-22', 'office@comp.ru'),
(2, 'WalrusTorg', 'ул. Пролетарская, д. 154', '+7 (905) 259-21-89', 'office@waltorg.ru');
--
-- Вывод данных для таблицы category
--
INSERT INTO category VALUES
(5, 'Блок питания'),
(2, 'Видеокарта'),
(7, 'Жесткий диск'),
(6, 'Корпус'),
(4, 'Материнская плата'),
(3, 'Оперативная память'),
(1, 'Процессор');
--
-- Вывод данных для таблицы shop
--
INSERT INTO shop VALUES
(1, 'Магазин в ТК Алоха', 'ул. Тютчевская, д. 2', '+7 (932) 139-73-10', 'tutchevskaya15@novparts.ru'),
(2, 'Магазин у ст. м. Чёрная речка', 'ул. Савушкина, д. 56', '+7 (924) 098-32-12', 'savushkina56@novparts.ru');
--
-- Вывод данных для таблицы part
--
INSERT INTO part VALUES
(15, 123123123123, 'AMD Ryzen 5 3600 OEM', 14990.00, 1, 2),
(16, 321321321321, 'Gigabyte GeForce GTX 1050Ti', 15990.00, 2, 2),
(17, 123456789123, 'Palit Gaming Pro GeForce RTX 3070', 119000.00, 2, 1),
(18, 987654321321, 'MSI X470 AM4 Gaming Plus Max', 7990.00, 4, 2);
--
-- Вывод данных для таблицы user
--
INSERT INTO user VALUES
(1, 'erius', 'Roge2003', 'Егор', 'Капралов', '+7 (905) 259-21-89', 'egor_kapralov2003@mail.ru', 'ул. Рогожский Поселок, д. 113'),
(2, 'WalrusYT', 'LubluMamy2003', 'Илья', 'Варлусов', '+7 (963) 089-94-25', 'taytsev@mail.ru', 'ул. Дружбы, д. 7'),
(3, 'arcwarden', 'pudgemom', 'Стэко', 'Слэйв', '+7 (957) 736-65-67', 'xrenxrenxrenxren@mail.ru', 'ул. Ращупкина, д. 21'),
(4, 'pupkin', 'vasya123', 'Вася', 'Пупкин', '+7 (911) 345-12-32', 'vasya_pupkin@mail.ru', 'ул. Ясеневая, д. 77');
--
-- Вывод данных для таблицы status
--
INSERT INTO status VALUES
(2, 'Можно забрать'),
(1, 'Ожидает прибытия'),
(3, 'Отменен');
--
-- Вывод данных для таблицы part_shop
--
INSERT INTO part_shop VALUES
(1, 15, 1, 0),
(2, 15, 2, 0),
(3, 16, 1, 8),
(4, 16, 2, 0),
(5, 17, 1, 0),
(6, 17, 2, 0),
(7, 18, 1, 0),
(8, 18, 2, 0);
--
-- Вывод данных для таблицы order_info
--
INSERT INTO order_info VALUES
(3, 1, 1, '2021-04-07 00:00:00');
--
-- Вывод данных для таблицы ord
--
INSERT INTO ord VALUES
(1, 3, 3, 2);
--
-- Восстановить предыдущий режим SQL (SQL mode)
--
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
--
-- Включение внешних ключей
--
/*!40014 SET FOREIGN_KEY_CHECKS = @OLD_FOREIGN_KEY_CHECKS */;