Хранение данных инвентаризации в отдельной таблице от данных продукта

TL; DR: по каким причинам нужно хранить таблицу данных о запасах отдельно от таблиц продуктов?

Некоторое время назад я создал приложение, в котором хранится каталог розничных товаров. Он включает стандартные атрибуты, такие как размер, цвет, ссылку на изображение, описание и т. Д. В основном в плоских таблицах. Это просто индексированные данные продуктов Magento, потому что приложение работает на отдельном сервере. В нем также был столбец для количества, который не имеет никакого смысла; Просто положил туда с мыслью «на всякий случай на будущее».

Теперь мне нужно реализовать какое-то управление запасами в этом приложении. Я изучал, как мне обновлять / настраивать структуру базы данных, и кажется, что системы предпочитают иметь отдельные "складские" таблицы из основных таблиц продуктов. Это верно и для Magento. Это почему? (Обратите внимание, что моему приложению не требуется возможность иметь отдельные уровни запасов для данного продукта.)

В связи с этим у меня возникла пара вещей ... (в основном, инвентарь будет отдельным объектом, кроме объекта продукта)

  • Несколько пулов запасов для данного продукта.

  • Возможность отслеживать изменения запасов (например, кто / что несет ответственность за изменение запасов и т. Д.)

  • Возможность разделения запасов из разных источников для отчетов или статистики.

  • Что-нибудь еще?

Обновление:

Хаззит, ответивший на мой вопрос, указал на потенциально очень полезный факт кэширования таблиц MySQL, если у вас много запросов к определенной таблице. Прочтите здесь ЗДЕСЬ, но это указано из этого ..

Если таблица изменяется, все кэшированные запросы, использующие эту таблицу, становятся недействительными и удаляются из кеша.

Таким образом, я, безусловно, получил бы большую пользу от наличия отдельной таблицы инвентаря, поскольку основная таблица продуктов не сильно изменилась, но запасы были.

Справочник по модели БД: http://www.databaseanswers.org/data_models/


person musicliftsme    schedule 28.12.2014    source источник
comment
Я чувствую, что опубликовать это во время праздника было ошибкой, ха.   -  person musicliftsme    schedule 29.12.2014
comment
Здесь всегда не так много экспертов по базам данных. :-) Причины хранить таблицу данных о запасах отдельно от таблицы данных о продукте. 1) Уровни запасов хранятся более чем в одном месте. Это могут быть контейнеры на складе или в торговых точках. 2) Некоторые товары могут отсутствовать на складе. Они могут быть доступны для специального заказа, могут быть больше не доступны или могут быть доступны в будущем. 3) На складе может быть более конкретная версия (размер, цвет и т. Д.) Товара. Надеюсь, это поможет.   -  person Gilbert Le Blanc    schedule 29.12.2014


Ответы (1)


•Что-нибудь еще?

TL / DR: Да, кеширование.

Вы уже перечислили большинство причин, по которым вам может понадобиться другая таблица с точки зрения номинализации, вероятно, есть еще несколько аналогичных причин для отдельной таблицы (или даже двух). Однако есть еще кое-что, что следует учитывать: количество на складе меняется намного чаще, чем остальная информация о продукте. В зависимости от обновления системы базы данных только один столбец может иметь или не иметь серьезного снижения производительности. Например: MySQL аннулирует все кеши запросов при любом обновлении базовых таблиц. Таким образом, если вы обновляете quantity_in_stock, любой запрос в этой таблице сделает его кеш недействительным - даже простой select name from products, который даже не использует столбец quantity_in_stock.

Пример из реальной жизни: Joomla имеет hits столбец в таблице статей. Каждый раз, когда просматривается статья, столбец обновляется, в результате чего ... как вы уже догадались! очищенный кеш запросов. Значение: всякий раз, когда кто-нибудь обращается к любой статье на веб-сайте Joomla, этот плохой сервер базы данных должен будет очистить свой кеш запросов на том, что обычно является самой большой таблицей во всей базе данных. На этом этапе вы можете просто отключить кеширование запросов.

Вернемся к вашему вопросу: если вы не ожидаете, что ваша система будет находиться под большой нагрузкой (например, общедоступный веб-сайт), вам следует задать себе только один вопрос: будет ли какой-либо продукт когда-либо иметь более одного количества на складе? Будет ли какое-либо количество на складе актуальным для более чем одного продукта? Если в обоих случаях ваш ответ «Нет», просто поместите столбец в основную таблицу продуктов.

person Hazzit    schedule 29.12.2014
comment
Очень хороший момент по механизму кеширования. Я не знал об этом! Я выложу ссылку на него в ОП для других. Спасибо! - person musicliftsme; 08.01.2015