SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.08.2016 23:34:06

sameuser
Участник
Зарегистрирован: 15.08.2016
Сообщений: 6

Общее значение

Добрый вечер.
Хочу посоветоваться прежде, чем двигаться дальше.
Предполагается работа с данными о товарах, которые приобретаются в интернет-магазинах.

Чуть ниже нарисовал пример smile Я постарался убрать как можно больше лишнего, чтобы облегчить восприятие.

Таблица с данными о покупке клиентом 10 джинс по такой-то цене в таком -то магазине.


//Таблица customer_goods
#ID     НазваниеТовара     КоличествоШт     Цена1шт     Магазин     ЦенаЗаДоставку

1       Джинсы             3                1000        Амазон      245
 

Клиент занимается перепродажей и ему важно знать (видеть прямо на сайте) себестоимость купленных товаров. А ее автоматический расчет - то, что нужно smile В данном случае мы строим простую формулу вида:

( КоличествоШт * Цена1шт + ЦенаЗаДоставку )   \   КоличествоШт 
   
Получаем себестоимость в 1 080 рублей \ шт.
Но бывает, что клиент покупает в одном магазине несколько товаров..
И вот тут основная задача этой темы smile


//Таблица customer_goods
#ID     НазваниеТовара     КоличествоШт     Цена1шт     Магазин     ЦенаЗаДоставку

1       Джинсы             2                 1000       |             |
2       Телефон            3                 5000       | Ebay        |  450
3       Приставка          1                15000       |             |
 


Как нам хранить данные о цене доставки за товары во втором случае? Эта цена является общей сразу для группы товаров (причем себестоимость товаров мы не сможем высчитать до тех пор, пока не добавим в таблицу столбец "Вес", но это - уже чуть другая история).

Мне приходили на ум разные идеи реализации.. Но не покидало чувство, что наиболее удобный вариант ускользает.. )

а) создать отдельную таблицу (напр., "Посылки"), в которой будут размещаться записи о цене доставки составных посылок (состоящих более, чем из 1 наименования).

из минусов - дополнительная таблица для расчетов (и в моем случае, если выберу этот вариант, ожидается скорее всего еще одна аналогичная таблица, третья по счету). Чтобы высчитать, например, сколько клиент потратил, нужно будет выбирать данные сразу из 3 таблиц.
С другой стороны в данном проекте не предполагается огромное количество транзакций, нагрузка в сотни тысяч соединений.. Это скорее частный сервис.
Второй минус - даже если клиент покупает 1 товар в 1 магазине, все равно будет создаваться запись во второй таблице. В этом есть некоторая избыточность..

б) шаманство в виде добавления в таблицу товаров столбца с внешним ключом от этой же таблицы (ID товара). Или аналогичная древовидная структура..
В рассмотренном примере "телефон" и приставка" должны будут ссылаться на ID товара строки "джинсы". А в ней уже хранится цена доставки всех товаров группы.
Минус в том, что при удалении "ключевого" товара рассыпется вся посылка, данные о доставке будут утеряны и нужно будет "собирать" эту посылку заново.


в) может, есть другие варианты? smile Не обязательно из серии клиентов и товаров.. Хотелось бы узнать о других возможных способах реализации (если они не сильно заморочены - для решения этой задачи можно обойтись без триггеров, временных таблиц и хранимых процедур SQL ? smile )

Сам я думаю остановиться на варианте "а)".

Отредактированно sameuser (16.08.2016 23:40:22)

Неактивен

 

#2 17.08.2016 15:37:19

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Общее значение

в вашем примере в таблице customer_goods нет информации о том, что товары относятся к одной посылке
т.е. вам нужно поле `номер посылки`
а `ЦенаЗаДоставку` переносите в таблицу `посылки`

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson