@Hidralisk

Хранение комбинаций?

Не уверен что точно сформулировал вопрос - но суть такова.
Предположим есть некий объект у которого 10 полей и в каждом поле может быть 100 различных уникальных значений.
Например поле ЦВЕТ может иметь 100 значений, следующее поле РАЗМЕР может иметь 100 значений и тд.
Сотруднику нужно дать возможность задавать некие комбинации. Например он может выставить что для ЦВЕТ = красный и РАЗМЕР = 20мм и ПЛОТНОСТЬ = 5 мы задаем некую скидку в 5%. Эти комбинации нужно хранить в базе. Заранее не известно сколько их будет .
Может быть скидка в 5% будет предоставляться вообще для всех возможных комбинаций, а может для одной а может и для 10000. Сотрудник может например указать для 5-ти полей ALL и включить все значения. Подскажите как лучше хранить такие данные?
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ответы на вопрос 2
@anikavoi
если длина предельной комбинации влезает в разрядность максимального целого типа бд, то банально:
3-й цвет из 10 6-й размер из ста, 2-я возрастная группа из десяти:
1052... почему не 2063? потому что от нуля считаем.

Если же варианты никуда не влезут типа: 356 вариант 4789065 схемы 195 подгруппы 56 группы 9879879 вектора 987987987 простраства итд итп, то... записываем в строку через запятую и делаем от нее хеш... любой толковый. Коллизии - обрабатываем отдельно.

ANY_HFUNC("356,4789065,195,56,9879879,987987987");

https://en.wikipedia.org/wiki/List_of_hash_functions
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Формулу расчёта скидки с именами полей и критериями для конкретной позиции храним в отдельной таблице.

При подсчёте итоговой стоимости проверяем совпадения критериев по таблице скидок, и, если есть, - умножаем итоговую стоимость именно для этой конкретной позиции на результат формулы-скидки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы