Я видел этот вопрос несколько раз на SO, но я еще не нашел ответа, который работает для меня.Как обращаться с инвентарем для изменения продукта?
Я разрабатываю систему электронной коммерции, где у нас есть простая система управления запасами. В принципе, каждый продукт может иметь много атрибутов, и каждый набор вариантов атрибутов может иметь различное количество. Взаимосвязь между продуктами и атрибутами много и управляется в другом месте, таблица инвентаризации просто заботится только об управлении количеством.
Итак, мой текущий подход заключается в сохранении комбинации значений атрибутов ids как строки в базе данных (и md5 и сохранении в другом столбце для более быстрого поиска). Этот подход позволяет мне быстро найти количество инвентаря, учитывая список атрибутов, а также позволяет мне легко редактировать через администратора.
Таблица содержит последующие столбцы (я оборвала его немного, чтобы сосредоточиться на основной структуре только)
`id` INT UNSIGNED NOT NULL ,
`product_id` INT UNSIGNED NOT NULL ,
`container_id` INT UNSIGNED NULL ,
`lot_id` INT UNSIGNED NULL DEFAULT NULL ,
`facility_id` INT UNSIGNED NULL DEFAULT NULL ,
`inventory_item_status_type_id` INT UNSIGNED NOT NULL ,
`feature_value_ids` TEXT NULL DEFAULT NULL ,
`key` VARCHAR(255) NULL DEFAULT NULL ,
`serial` VARCHAR(255) NULL ,
`quantity_onhand` INT UNSIGNED NOT NULL DEFAULT 0
Недостатком этого метода является то,
- Если продукт имеет следующие атрибуты : 1,2,3,4,5
- Реестр определен для 1,3,4 и 1,2,3,4, но не 1,2,3,4,5
- Когда пользователь выбирает 1 , 2,3,4,5, то 1 возможным желаемым поведением является tha t система должна использовать количество 1,2,3,4 (которое является самой близкой комбинацией, которую он может получить). В этом случае, возможно, нам придется использовать полнотекстовое совпадение для ближайшей комбинации.
Для этого вопроса, как вы думаете, если что-то не так с этим подходом, и как бы вы сделали это по-другому?
Я вижу, я просто подумал, что быстрее найти короткий varchar и полный текст. Не могли бы вы сообщить мне, что вы подразумеваете под «динамическим программированием»? – mr1031011
Полное описание динамического программирования лучше всего найти через Google. Короче говоря, вы кэшируете вывод для известных входов, а затем решаете свою проблему, рекурсивно решая ту же проблему при меньшем размере. –