Дизайн базы данных для состава продуктов - PullRequest
0 голосов
/ 25 августа 2011

Это небольшая проблема для вас, коллега по цвету.

Я работаю с базой данных продуктов, которые мы продаем в нашем веб-приложении для котировок.Каждый продукт имеет следующие атрибуты:

  • Уникальный идентификатор
  • Артикул
  • Описание
  • Цена
  • Запчасти

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

По состоянию на данный моментв нашей системе предложений мы не беспокоимся о том, какой вариант (новый цвет, дополнительная дверь и т. д.) выбрал клиент для своей солярии, мы просто беспокоимся об общем названии модели (например: SUN-0810 для8 на 10 (солярий), а затем установите для него цену.

Моя конечная цель - создать спецификацию (ведомость материалов или список деталей) для предложения в зависимости от того, какую модель и какие опции заказчиквыбрал.У нас уже есть все детали, хранящиеся в базе данных, и они должны быть связаны с моделями.

Теперь вот моя проблема: у нас есть ~ 800 различных моделей с широким выбором опций для каждой.Например, стандартная солярий состоит из левой стены, центра и правой стены.Стена может быть трех разных цветов, может не иметь ни двери, ни одной двери (возможно, больше в зависимости от размера солярия).Центр также может быть трех разных цветов и 11 разных длин.

Вот пример одной комбинации для универсальной модели:

SUN-0810 (солярий 8 футов на 10 футов)

  • Левая стена: уголь длиной 8 футов с дверью
  • Правая стена: уголь длиной 8 футов без двери
  • В центре: уголь длиной 10 футов

Отсюда и новыйНазвание модели ( SKU ) для этой конкретной комбинации будет выглядеть примерно так:

SUN-0810CH-L1-R0 .

В концепросто для солярия 8 на 10 (SUN-0810) я бы закончил с этим:

  • SUN-0810CH-L0-R0 (8 на 10, цвет = угольный, левая стена = нетдверь, правая стена = нет двери)
  • SUN-0810CH-L1-R0 (8 на 10, цвет = уголь, левая стена = с дверью, правая стена = нет двери)
  • SUN-0810CH-L0-R1 (8 на 10, цвет = уголь, левая стена = нет двери, правая стена = с дверью)
  • SUN-0810CH-L1-R1 (8 на 10, цвет = уголь, левая стена= с дверью, с правой стенкой = с дверью)
  • SUN-0810SM-L0-R0 (8 на 10, цвет = дым, левая стена = нет двери, правая стена = нет двери)
  • SUN-0810SM-L1-R0 (8 на 10, цвет = дым, левая стена = с дверью,правая стена = нет двери)
  • SUN-0810SM-L0-R1 (8 на 10, цвет = дым, левая стена = нет двери, правая стена = с дверью)
  • SUN-0810SM-L1-R1 (8 на 10, цвет = дым, левая стена = с дверью, правая стена = с дверью)

Чтобы сохранить ваши детали, у нас есть около 800 типовых моделей, таких как SUN-0810,Я выполнил некоторые математические расчеты и понял, что если бы я хранил каждую возможную комбинацию варианта продукта, это привело бы к более чем 50 000 различных продуктов.

Допустим, все 50 000 различных продуктов хранятся в базе данных, мне нужно определить их части для каждого из них.Как я уже говорил выше, части уже хранятся в базе данных.Вот несколько примеров:

Part SKU | Описание

ENT28 28 дюймов Поперечная шпилька

SCREW6-ZW 6 ммцинковый белый винт

ATT90ALU 90 градусов алюминиевая стяжка

Конечный результат будет следующим:

SUN-0810CH-L1-R0 содержит:

  • ENT28 x4
  • SCREW6-ZW x19
  • ....
  • ....

Я понял, что основная проблема заключается в том, что большинство моделей содержат более 50+ частей каждая, и потребуется целая вечность, чтобы определить состав всех 50 000 различных моделей.

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

Спасибо за ваше время.

1 Ответ

0 голосов
/ 25 августа 2011

Мне кажется, что ваша задача не в том, чтобы определить все возможные перестановки частей.То, что вы хотите определить, это два списка.Один список - это список того, какой частью является конкретная часть.Например, у вас есть одна запись «тип продукта» под названием «Винт 6 мм», а затем несколько дочерних записей, которые выделяют выбор цвета для этой детали.

Другая вещь, которая вам нужна, - это более или менее стандартный счетсхемы материалов, которая разбивает ваши товарные продукты на типы продуктов , а не на отдельные продукты.

Таким образом, у вас будет немало работы, которую можно выполнить, но она выигралаэто неуправляемый объем работы.Когда вы соберете настроенный продукт вместе, эта схема позволит вам выбрать пользователя для каждого из необходимых типов продуктов, составляющих настроенный продукт.

ОБНОВЛЕНИЕ: Пример

Вот пример того, как абстрагироваться от спецификации для работы с типами вместо частей.Давайте использовать OP 8x10 солярий в качестве примера.

Для иллюстрации предположу, что у вас есть таблица ASSEMBLY, которая представляет типы деталей по отдельности или в некоторой комбинации.Я также предполагаю таблицу СОСТАВ, которая представляет, какие сборки являются частью каких других сборок, а также, сколько из них требуется.Наконец, я предполагаю таблицу PARTS, которая подробно содержит отдельные компоненты.

В этом примере ЧАСТИ на продажу отсутствуют.Обратите внимание, что в реальном примере, в зависимости от вашего бизнеса, вы можете продать свои сырые детали.Если бы это было правдой, ваша таблица ASSEMBLY, вероятно, имела бы несколько тривиальных записей, которые соответствуют отдельным записям в PARTSЯ собираюсь оставить эту морщинку ради этой иллюстрации.

Итак, наш сценарий - солярий 8 x 10, для которого нужна левая стена, центральная стена и правая стена.Стороны могут иметь или не иметь двери, и возможны различные цветовые комбинации.

Ваша таблица ASSEMBLY имеет такие записи: (Атрибуты: ключ, описание)

  • 1000, 8 x10 SUN ROOM
  • 2001, 8 'ЛЕВАЯ СТОРОНА
  • 2002, 8' CENTER WALL
  • 2003, 8 'ПРАВАЯ СТОРОНА

Ваша таблица COMPONENT имеет следующие записи: (Атрибуты: родительский ключ сборки, количество, дочерний ключ сборки) - это ваша таблица спецификаций ...

  • 1000, 1, 2001
  • 1000, 1, 2002
  • 1000, 1, 2003

В вашей таблице PARTS есть такие записи: (Атрибуты: ключ, ключ сборки, описание детали)

  • 9000, 2001, 8 'ЛЕВАЯ СТОРОНА УГОЛЬНАЯ, НЕТ ДВЕРИ
  • 9001, 2001, 8' ЛЕВАЯ СТОРОНА КУРИТЬ НЕ ДВЕРЬ
  • 9002, 2001, 8 'ЛЕВАЯ СТОРОНАCHARCOAL W / DOOR
  • 9003, 2001, 8 'ЛЕВАЯ БОКОВАЯ СТЕНА ДЛЯ ДЫМОХОДА С ДВЕРЬЮ
  • 9004, 2002, 10' CENTER WALL CHARCOAL NO DOOR
  • 9005, 2002, 10 'CENTER WALL DOOR
  • 9006, 2002, 10' CENTER WALL CHARCOAL W / DOOR
  • 9007, 2002, 10 'CENTER WALL SMOKE W / DOOR
  • 9008, 2003, 8 'ПРАВОВАЯ СТОРОНА, УГОЛЬНАЯ НЕТ ДВЕРЬ
  • 9009, 2003, 8' ПРАВАЯ СТОРОНА, КУРИТЬ НЕ ДВЕРЬ
  • 9010, 2003, 8 'ПРАВОВАЯ СТОРОНА, УГОЛЬНАЯ ШАРКАЛЬ С ДВЕРЬЮ
  • 9011, 2003, 8 'ДЫМОВАЯ СТЕНА ДЛЯ ПРАВОЙ СТОРОНЫ С ДВЕРЬЮ

Таким образом, для каждой составляющей детали есть запись, для каждой * есть запись1071 * тип сборки, содержащей несколько деталей, и имеется только одна запись для каждого типа компонента, необходимого для любой данной сборки.

Это окажется гораздо меньше данных для управления, чем пытаться вручную поддерживать каждую перестановку этих частей вместе.(3 записи вместо 4 ^ 3 записи)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...