Добрый вечер.
Хочу посоветоваться прежде, чем двигаться дальше.
Предполагается работа с данными о товарах, которые приобретаются в интернет-магазинах.
Чуть ниже нарисовал пример Я постарался убрать как можно больше лишнего, чтобы облегчить восприятие.
Таблица с данными о покупке клиентом 10 джинс по такой-то цене в таком -то магазине.
//Таблица customer_goods
#ID НазваниеТовара КоличествоШт Цена1шт Магазин ЦенаЗаДоставку
1 Джинсы 3 1000 Амазон 245
Клиент занимается перепродажей и ему важно знать (видеть прямо на сайте) себестоимость купленных товаров. А ее автоматический расчет - то, что нужно
В данном случае мы строим простую формулу вида:
( КоличествоШт * Цена1шт + ЦенаЗаДоставку ) \ КоличествоШт
Получаем себестоимость в 1 080 рублей \ шт.
Но бывает, что клиент покупает в одном магазине несколько товаров..
И вот тут основная задача этой темы
//Таблица customer_goods
#ID НазваниеТовара КоличествоШт Цена1шт Магазин ЦенаЗаДоставку
1 Джинсы 2 1000 | |
2 Телефон 3 5000 | Ebay | 450
3 Приставка 1 15000 | |
Как нам хранить данные о цене доставки за товары во втором случае? Эта цена является общей сразу для группы товаров (причем себестоимость товаров мы не сможем высчитать до тех пор, пока не добавим в таблицу столбец "Вес", но это - уже чуть другая история).
Мне приходили на ум разные идеи реализации.. Но не покидало чувство, что наиболее удобный вариант ускользает.. )
а) создать отдельную таблицу (напр., "Посылки"), в которой будут размещаться записи о цене доставки составных посылок (состоящих более, чем из 1 наименования).
из минусов - дополнительная таблица для расчетов (и в моем случае, если выберу этот вариант, ожидается скорее всего еще одна аналогичная таблица, третья по счету). Чтобы высчитать, например, сколько клиент потратил, нужно будет выбирать данные сразу из 3 таблиц.
С другой стороны в данном проекте не предполагается огромное количество транзакций, нагрузка в сотни тысяч соединений.. Это скорее частный сервис.
Второй минус - даже если клиент покупает 1 товар в 1 магазине, все равно будет создаваться запись во второй таблице. В этом есть некоторая избыточность..
б) шаманство в виде добавления в таблицу товаров столбца с внешним ключом от этой же таблицы (ID товара). Или аналогичная древовидная структура..
В рассмотренном примере "телефон" и приставка" должны будут ссылаться на ID товара строки "джинсы". А в ней уже хранится цена доставки всех товаров группы.
Минус в том, что при удалении "ключевого" товара рассыпется вся посылка, данные о доставке будут утеряны и нужно будет "собирать" эту посылку заново.
в) может, есть другие варианты?
Не обязательно из серии клиентов и товаров.. Хотелось бы узнать о других возможных способах реализации (если они не сильно заморочены - для решения этой задачи можно обойтись без триггеров, временных таблиц и хранимых процедур SQL ?
)
Сам я думаю остановиться на варианте "а)".
Отредактированно sameuser (16.08.2016 23:40:22)