Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 1
Регистрация: 03.11.2016
Сообщений: 40
1

Добавление нового заказа в высоконагруженную систему

03.12.2019, 12:50. Показов 709. Ответов 0

Author24 — интернет-сервис помощи студентам
Здравствуйте, необходима помощь с высоконагруженным запросом.

Необходимо составить SQL-запрос, который позволяет заносить данные заказа клиента с учетом специфики высоконагруженной системы.

При составлении SQL-запроса необходимо учесть следующее:

- для занесения данных в корзину заказа (shopping_cart) необходимы значения внешних ключей (fk_order и fk_product);

- существует проблема получения значения id_order, в случае занесения данных заказа в таблицу Order. Она обусловлена ​​тем, что за время от занесения данных заказа до наполнения корзины, в высоконагруженной системе уже могли быть оформлены другие заказы;

- существует проблема добавления товаров (fk_product) в корзину заказа (shopping_cart). Перед добавлением товара в корзину, необходимо проверить, превышает ли количество (shop_quantity) заказанного товара в корзине его количество (quantity) на складе. Если нет, то количество товара на складе необходимо уменьшить на количество в корзине. Однако, за время наполнения корзины в высоконагруженной системе уже могли быть оформлены другие заказы на этот товар. То есть текущее значение количества товара в корзине и на складе (shop_quantity и quantity) может оказаться не актуальным (недействительным).

Таблица "Order":
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
CREATE TABLE IF NOT EXISTS `MyDB_Inno_DB`.`Order`
(
`id_order` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`fk_client` INT UNSIGNED NOT NULL,
`fk_delivery` INT UNSIGNED NULL,
`date` DATE NOT NULL,
`st_initiate` BIT(1) NOT NULL,
`st_executed` BIT(1) NOT NULL,
`address` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL,
`delivery_price` FLOAT(6,2) NULL,
`delivery_date` DATE NULL,
`delivery_time` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL,
`delivery_phone` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL,
PRIMARY KEY (`id_order`),
INDEX `fk_Order_Client_id_name` (`fk_client` ASC),
INDEX `fk_Order_Delivery_id_name` (`fk_delivery` ASC),
CONSTRAINT `fk_Order_Client_name` FOREIGN KEY (`fk_client`)
REFERENCES `MyDB_InnoDB`.`Client` (`id_client`)
ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `fk_Order_Delivery_name` FOREIGN KEY (`fk_delivery`)
REFERENCES `MyDB_InnoDB`.`Delivery` (`id_delivery`)
ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;
Таблица "Shopping_Cart":
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE IF NOT EXISTS `MyDB_InnoDB`.`Shopping_Cart`
(
`fk_order` INT UNSIGNED NOT NULL DEFAULT 0,
`fk_product` INT UNSIGNED NOT NULL DEFAULT 0,
`shop_quantity` INT NOT NULL,
PRIMARY KEY (`fk_order`, `fk_product`),
INDEX `fk_Shopping_Cart_Order_id_name` (`fk_order` ASC),
INDEX `fk_Shopping_Cart_Products_id_name` (`fk_product` ASC),
CONSTRAINT `fk_Shopping_Cart_Order_name` FOREIGN KEY (`fk_order`)
REFERENCES `MyDB_InnoDB`.`Order` (`id_order`)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_Shopping_Cart_Products_name` FOREIGN KEY (`fk_product`)
REFERENCES `MyDB_InnoDB`.`Products` (`id_product`)
ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci
Таблица "Products":
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE IF NOT EXISTS `MyDB_InnoDB`.`Products`
(
`id_product` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`fk_catalog` INT UNSIGNED NOT NULL DEFAULT 0,
`product_name` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
`release_date` DATE NOT NULL,
`price` FLOAT(6,2) NOT NULL,
`quantity` INT NOT NULL,
`description` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
PRIMARY KEY (`id_product`),
INDEX `fk_Products_Catalog_id_name` (`fk_catalog` ASC),
CONSTRAINT `fk_Products_Catalog_name` FOREIGN KEY (`fk_catalog`)
REFERENCES `MyDB_InnoDB`.`Catalog` (`id_catalog`)
ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;
Как я это понимаю:

1) сначала добавляется запись о новом заказе в таблицу "Order" (id_order, fk_client, date);

2) далее идёт заполнение корзины, таблица "Shopping_Cart" (fk_order, fk_product, shop_quantity), также перед добавлением товара мы проверяем условия: превышает ли количество (shop_quantity) заказанного товара в корзине его количество (quantity) на складе и если нет, то количество товара на складе необходимо уменьшить на количество в корзине.

При этом не понятно как в одном запросе произвести вставку сразу в 2 таблицы (Order, Shopping_Cart) и как выполнить следующие условия:

1) При этом существует проблема получения значения id_order, в случае занесения данных заказа в таблицу Order. Она обусловлена ​​тем, что за время от занесения данных заказа до наполнения корзины, в высоконагруженной системе уже могли быть оформлены другие заказы.

2) Однако, за время наполнения корзины в высоконагруженной системе уже могли быть оформлены другие заказы на этот товар. То есть текущее значение количества товара в корзине и на складе (shop_quantity и quantity) может оказаться не актуальным (недействительным).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2019, 12:50
Ответы с готовыми решениями:

Как спроектировать высоконагруженную систему на ASP?
Здравствуйте! Есть идея сервиса, который захватит весь мир! Т.е. будет много желающих, будет...

Метод добавления нового заказа
Всем здрасте :) Помогите задачку решить нужно сформировать заказ на сайте без участия пользователя....

Уведомление при появлении нового заказа на FL.ru, freelance.ru, Upwork и т. д
Здравия всем! В общем, хочу заняться фрилансом. Одна проблема, я никогда не успеваю отвечать на...

СМА Whirlpool WP1088/45MPA, Подскажите код для заказа нового модуля
Подскажите код для заказа нового модуля на Whirlpool WP1088/45MPA 461975301291 00 75225752 Nr: ...

0
03.12.2019, 12:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2019, 12:50
Помогаю со студенческими работами здесь

Подскажите, как сделать систему заказа товаров
Привет всем :-) Ломаю себе голову и никак не могу понять как сделать систему заказа товаров с...

Стиральная машина Whirlpool AWT 2290, нужен код для заказа нового модуля
Стиральная машина Whirlpool AWT 2290 856122984000 340430021329 на модуле 461975301941 нужен код...

Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей
Здравствуйте. Помогите, пожалуйста, разобраться с одним большим заданием. Задание пока в процессе...

Добавление нового столбца в DataGridView и в первую строку данного столбца добавление значения из textbox
Привет всем! Народ подскажите как мне сделать чтобы через кнопу Button добавлялся новый столбец в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru