2013-03-15 2 views
0

Я видел этот вопрос несколько раз на 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. Если продукт имеет следующие атрибуты : 1,2,3,4,5
  2. Реестр определен для 1,3,4 и 1,2,3,4, но не 1,2,3,4,5
  3. Когда пользователь выбирает 1 , 2,3,4,5, то 1 возможным желаемым поведением является tha t система должна использовать количество 1,2,3,4 (которое является самой близкой комбинацией, которую он может получить). В этом случае, возможно, нам придется использовать полнотекстовое совпадение для ближайшей комбинации.

Для этого вопроса, как вы думаете, если что-то не так с этим подходом, и как бы вы сделали это по-другому?

ответ

0

Если вы можете сэкономить время, чтобы обновить таблицу, содержащую: attribute id tuple => список product_id, каждый раз, когда в таблице продуктов есть обновление, поиск подмножества атрибута может быть выполнен быстро с помощью динамического программирования.

Я не уверен, зачем вам нужно md5 значение атрибута value ids string для поиска точного соответствия. MySQL должен иметь возможность индексировать любой произвольный столбец.

+0

Я вижу, я просто подумал, что быстрее найти короткий varchar и полный текст. Не могли бы вы сообщить мне, что вы подразумеваете под «динамическим программированием»? – mr1031011

+0

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