powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Универсальный каталог "разношерстных" товаров.
18 сообщений из 18, страница 1 из 1
Универсальный каталог "разношерстных" товаров.
    #32401192
Евгений3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо создать максимально широкий каталог для самых разных товаров в универмаге. Одновременно могут продаваться и эмалированные ведра, и авторучки и автомобили. Необходимо разработать структуру хранения и поиска по параметрам. Параметры могут быть от объема двигателя и цвета, до производителя и запаха (напр. для одеколона). Каталог должен быть легко расширяем как по созданию новых типов товаров, так и в отношении добавления новых параметров уже существующих. Может кто сталкивался с подобной задачей?\r
Пока есть такие варианты:\r
1) Создается мегатаблица вида:\r
id | type | color | country | mfgr | date | ...| параметрN | параметрN+1 и т.д.\r
то есть, перечисляем в колонках все виды параметров (часть из них будет собственно данными - цена, год и т.д, а часть ссылками на другие таблицы - например, производитель, цвет и тп.), которые есть в системе. Занося инфо о новом товаре, мы заполняем только нужные поля, остальные оставляем NULL.\r
2) Набор отдельных табличек для каждого типа товара и таблица связка, раскрывающая что каждый тип обозначает. Тогда к каждой таблице можно приписать только определенные параметры, и никто не сможет ввести для пачки сигарет октановость, или крепость для бензопилы. Но как быть с цветами предметов? Например, диапазон цветов автомобилей и вина различается кардинально. Не заводить же отдельно таблицы цвета_вин, цвета_авто и др. Значит, проблема контроля вводимых значений остается. И опять же что такое тип товара? Навреняка будет немало товаров очень похоих друг на друга по возможным параметрам - значит, разделение несколько условно.\r
3) Вариант фиксированного количества таблиц и записи параметров не по горизонтали и по вертикали, то что активно обсуждалось в теме про больных у каждого из которых может быть от 10 до 124 параметров. /topic/70514\r
\r
Т.е. примерно такая структура:\r
Табл 1: Справочник типы товаров:\r
- номер типа\r
- название\r
- ссылка на родительский тип (если нужно сделать какое-то подобие иерархичности)\r
Данные: \r
№ строки -- название -- ссылка\r
1 -- сигареты -- 0\r
2 -- вино -- 0\r
3 -- авторучки --0\r
\r
Табл 2: Справочник типы параметров:\r
- номер параметра\r
- название\r
№ -- название \r
1 -- крепость\r
2 -- производитель\r
3 -- форма бутылки\r
4 -- количество в упаковке\r
5 -- материал\r
6 -- позолочено?\r
\r
Табл 3: Сами товары. Ммеет следующий вид\r
№ строки -- № типа товара -- тип параметра -- значение \r
1 -- 1 -- 2 -- 15%\r
2 -- 1 -- 4 -- 20\r
3 -- 3 -- 5 -- золото\r
и так далее.\r
Я уже высказывал в той теме, что нужно хранить не сами значения, а ссылки на них. Т.е. база обогащается таблицами "материал", "производитель", "страна", "цена" и т.п. \r
А где хранить название и другие уникальные вещи, например, крепость?\r
Получается, их тоже нужно вынести в отдельную таблицу и делать ссылки 1:1.\r
Кто что думает по этому поводу?
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32401207
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО
Любое "универсальное" решение всегда имеет много минусов. Как то - сложность структуры, трудность проектирования, трудность сопровождения, неконтролируемость поведения в определенных условиях (типа все не предусмотришь) и т.д.
Я бы пошел таким путем. Выделил супер типы товаров, и на них навешивал свои структуры данных. Например машины, галантерея, продукты питания. Так ИМХО проще. Плюс автоматом решается проблема доступа к своей инфе, когда продавец из гастронома не имеет никакого выхода на автомобили.
А свести все в кучу для аналитики гораздо проще, чам разнести по категориям.
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32401233
Petr Chulkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот как у себя в подобной ситуации поступал я (краткое описание)..

таблица - рубрикатор.. как правило - дерево.. поля примерно след (названия полей взяты из комментариев без pre-publish подготовки).
- ключ
- parent ключ (для дерева)
- название номенклатурной группы..

таблица - товары... соотв. собраны общие для всех товаров поля... например
- ключ,
- код в рубрикаторе,
- Артикул товара,
- рекомендуемая цена,
- Упаковочное количество (Количество номенклатурных единиц в одной упаковке по-умолчанию),
- Нетто вес. ( Вес товара БЕЗ упаковки. Данная информация используется при расчете полного веса заказа или закупки. Вес-нетто спецификации может быть рассчитан автоматически путем суммирования веса деталей.),
- Вид упаковки
- брутто-глубина. Габариты одной единицы упакованного товара. Используются для проверки, может ли товар на палете поместиться в ячейке хранения.
- брутто-ширина. Габариты одной единицы упакованного товара. Используются для проверки, может ли товар на палете поместиться в ячейке хранения.
- брутто-высота. Габариты одной единицы упакованного товара. Используются для проверки, может ли товар на палете поместиться в ячейке хранения.
- Тип контейнера, на котором может размещаться товар.
- Стандартное количество товара, умещающееся на одной палете. Используется для автоматического разбиения по палетам.
- минимальная партия
- Временно блокирован приём заказов на этот товар
- Стандартное время доставки товара,т.е. количество дней, которое проходит с момента заказа товара до его поставки на склад.
- описание \ примечание.....
- код сотрудника, добавившего запись
- дата добавления

таблица - список свойств товаров.. всех возможных товаров...
- ключ
- название свойства товара
- тип св-ва (String,Percent,Bit,Real)
- Обязательное для заполнения (bit)
- дополнительное описание

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

ну и соотв. таблица - значений св-тв товаров
- ключ
- код свойства
- код товара
- значение - бит
- значение - строка (до 1000 знаков)
- значение - текст
- значение - numeric
- значение - Дата
- кто и когда добавил \ изменил данные....

соотв. остальные справочники не описываю....

ps: таблица значений св-тв товаров не претендует на оптимальность хранения данных, но ИМХО мне так удобнее всего..

С уважением, Petr@Chulkov.NET
Microsoft
Certified Professional
Chulkov.Net - Trustworthy Knowledge
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32401241
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку.
А стоит ли вообще забивать магазинную БД такими вещами как объем двигателя и градация цветов вина? Может проще - наименование, цена, количество + некоторый текс в примечании. Ну еще некий код группы товара (но не такой подробный - это с ума сойти). Принимать то товар по накладной будешь, а там наверняка только это. Самому выдумывать? Нафига?

А штучный дорогой товар и учитывать можно поштучно. Наверняка автомобили не десятками в день продаются.
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32401257
Евгений3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Серега:
если большой каталог, то у клиента возникает потребность в различных выборках. На примере тех же фотоаппаратов: человек может не разбираться каая марка лучше или хуже, что ему нужно Сони или Олимпус. Но может твердо знать, что он хочет зеркалку с таким -то зумом, или в таком-то ценовом диапазоне.
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32401267
Евгений3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Petr Chulkov
Т.е. в значениях свойств ты хранишь несколько типо в колонок и из них используется только одна, которая указана в описании самого типа?
По поводу иерархии в каталоге, т.е. есть типы-ветки, а есть конкретные позиции-листья? И листья могут иметь лишь те типы параметры, что приписаны для родительских элементов? Это экономит лишнюю таблицу, позволяет сделать наследование, но усложняет работу - начинается какой-то иерерхо-объектный подход. Или я тебя не правильно понял?
Кстати, тут есть спецы по иерархическим или объектым базам?
как там решить эту задачу?
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32401302
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В универмаге про зумы фотоаппарата должен знать продавец-консультант. Он на то и консультант . В БД это тянуть совсем необязательно. Ты прикинь, сколько надо ввести инфы что бы оприходовать один товар. С ума сойдешь. Кто будет вводить и с чего, т.е. с какого документа? С техпаспорта? А он где? В коробке? Кладовщица матерясь полезла открывать коробку и искать паспорт на аглицком языке. Свежо предание, но верится с трудом.

Я помнится делал прогу для коммисионки. Не универмаг конечно, но номенклатура тоже ого-го. Они тоже сначала хотели анализа по миллиону параметров. Но подумав, отказадлись. Я им просто сказал, что все эти параметры надо вводить ручками на все товары, сами они ни от куда не возьмутся. Убедил.
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32401322
Petr Chulkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Евгений3 :

Евгений3Т.е. в значениях свойств ты хранишь несколько типо в колонок и из них используется только одна, которая указана в описании самого типа?
да...
есть у меня под это дело спец. компонентик.. (сам писал ;-) )

Евгений3По поводу иерархии в каталоге, т.е. есть типы-ветки, а есть конкретные позиции-листья?
ну это зависит от конкретной реализации....

Евгений3И листья могут иметь лишь те типы параметры, что приписаны для родительских элементов?
ну немного перефразирую... у товаров могут быть только те свойства, что заданы для номенклатурной группы, в которую входит выбранная номенклатура...

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

Евгений3но усложняет работу - начинается какой-то иерерхо-объектный подход. Или я тебя не правильно понял?
наверное неправильно (сорри, но я как экстрасенс не особо.. так что не могу угадать, КАК ты понял).... на самом деле всё не так то и сложно... рекомендую 1-м шагом сделать выбор конкретной группы.. а далее выводить тока список номерклатур в выбранной группе... с возможностью указывать, СКОЛЬКО товарных единиц каждого наименования надо добавить в спецификацию заказа.... ну и можно предусмотреть ещё выборку не тока по номенклатурной группе , но, скажем, по какому-нить фильтру.. ну там типа categoryTitle like ? or articul like ? .... тогда в данном случае можно или одной из колонок вывести название группы... ну или группировать по названию группы - делай, как нравится...

Евгений3Кстати, тут есть спецы по иерархическим или объектым базам?
как там решить эту задачу?
вроде как в BOL был пример построения дерева.... да и на форуме неоднократно возникает этот вопрос (как построить дерево)...

С уважением, Petr@Chulkov.NET
Microsoft
Certified Professional
Chulkov.Net - Trustworthy Knowledge
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32401326
Petr Chulkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Серега:
если интересует ТОЛЬКО ведение учёта заказа - тогда хватит артикула и цены по каждой позиции. а если в дальнейшем понадобится доп. функционал - тогда хотя бы тот минимум, что я перечислил стоит вводить (что бы хотя бы примерно можно было бы оценить потребность в транспорте для заказа и т.д.)....
а о доп. св-вах - дело вкуса.. если например в дальнейшем будут делать, к примеру, возможность потенциальным клиентам (перед покупкой) ознакомится с сортаментом товаров через WWW ( для крупных городов не такая уж и плохая мысль ), где консультанта рядом нет, то это - даже таки очень правильно...

С уважением, Petr@Chulkov.NET
Microsoft
Certified Professional
Chulkov.Net - Trustworthy Knowledge
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32401472
Dmitriy Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Офф-топиком на офф-топик :)

авторВ универмаге про зумы фотоаппарата должен знать продавец-консультант. Он на то и консультант. В БД это тянуть совсем необязательно. Ты прикинь ...

Бывают еще интернет-магазины.

И не надо говорить что в России не бывает интернет-магазинов. С нынешними темпами научно-технического прогресса очень часто получается что пока систему напишут и внедрят, пройдет столько времени, что через пару лет эксплуатации ее начинают использовать не совсем для того, для чего ее разрабатывали (и по целям, и по объемам).

Давайте допустим, что лет через 5 у всех будут интернет магазины. С такой базой ваши клиенты окажутся в ...пе. У них дела пойдут плохо и закончатся деньги. Они перестанут заказывать у вашей конторы программы, а новых клиентов тоже не будет. Контора закроется а вам придется искать новую работу :(. Печальный опыт вашей конторы будут знать все программисты города, отчего резюме Ваше будет Вам только мешать найти работу.

Еще раз прошу прощения за офтоп.

P.S. да и вообще, зачем тогда база нужна?
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32401807
Тимк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По моему, путаются две задачи - справочник для учета товара на складе и информационная база о товарах, каталог заказов.

Если говорить строго, это два разных справочника. Первый ведется по артикулам товаров, а второй по кодам заказа.

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

А пришить одно к другому нет никаких проблем.

Учет на складе должен вестись по артикулам и номерам партий.

Информацию о товаре в развернутом виде в учетной базе хранить смысла нет.
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32402391
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Petr Chulkov: А почему Вы в в таблице значений свойств товаров имеете несколько полей (5) на значение параметра? Я бы хранил значение в 1 единственном текстовом поле, а уже на клиенте в зависимости от типа параметра с использованием Variant преобразовывал его к нужному виду.
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32403820
Petr Chulkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Shtock :
стиль программирования такой, что ли... ну не люблю я конвертировать данные.. т.к. это часто бывает связано с потерей оных... а не хочется... конечно можно хранить всё в sql_variant поле... но зачем ? когда у меня клиентский компонент всё это дело аккуратно сам разбрасывает по нужным полям... O-)

С уважением, Petr@Chulkov.NET
Microsoft
Certified Professional
Chulkov.Net - Trustworthy Knowledge
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32405057
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может и не стоило писать, все равно офтопик, но...

2Dmitriy Popov
Бывают еще интернет-магазины.
И не надо говорить что в России не бывает интернет-магазинов.

А бывают еще транснациональные корпорации и не надо говорить что в России никогда не будет транснациональных корпораций. Только софта они требуют другого (принципиально другого!!!), нежели для универмага. Лично я предпочитаю писАть для тех кто будет с этим работать здесь и сейчас. И желательно по утвержденному (или хотя бы оговоренному) ТЗ.
Еще раз сори за офтопик.
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #32409044
Фотография UK0IAI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Евгений3

Пишем предложение

Рынок.Магазин.Товар.Название.Цвет.краска.Упаковка.Тара.Кол-во.Цена
или так
Товар.Марка.(Кол-во1,Кол-во_2).Цена

С виду это похоже на ...оператор в ООП. Такие "фразы" - у вас могут в бесконечном своем разнообразии....

Для хранения этой инфо и автоматической выборки сущности - достаточно и необходимо иметь всего одну таблицу БД - имя которой - Дерево.

Но эта таблица в отличие от подобных имеет в себе
-- дерево атрибутов
-- дерево ярлыков (..."иконок" ..ссылок на другие строки дерева)

Тогда можно сделать примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  --Товар (название)
 
     -- атрибут 1 (название)
 
           -- параметр атрибута_1.1 (значение 1, значение 2, значение 3)
 
           -- параметр атрибута_1.2 (значение 1, значение 2, значение 3)
 
     -- атрибут 2 (название)
 
           -- параметр атрибута_2.1 (значение 1, значение 2, значение 3)
 
          -- параметр атрибута_2. 2  (значение  1 , значение  2 , значение  3 )


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

Результат - можно привести к записи типа : Товар.Марка.(атрибут1,атрибут2....).Цена

Или на оборот имея - формулу товара - получить все валуе.

Формула Товара - это по сути шаблон (алгоритм) для расшифровки дерева....его можно также хранить в БД.

Пример 1 - в такое табло лично запихал черт_знает что (от подсистемы доступа....) когда все коллекции сущностей - все в одном табло....
"внизу" - оригиналы
"вверху" - иерархии ссылок на оригиналы.

Пример 2
В интерфейсе есть 3 кнопки -
создать пустую строку

копировать_узел

копировать_линк

При их нажатии, в Дереве появляются новые строки: - просто новые, или копии других строк ИЛИ - "Ярлыки (линки)" - на некие другие строки.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Универсальный каталог "разношерстных" товаров.
    #34717641
amaxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2UK0IAI
А можно уточнить какие поля будут у такой таблицы - дерева?
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #34718288
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amaxa2UK0IAI
А можно уточнить какие поля будут у такой таблицы - дерева?Это вопрос автору ?
Посмотрите на дату топика :)
...
Рейтинг: 0 / 0
Универсальный каталог "разношерстных" товаров.
    #34724744
Фотография UK0IAI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amaxa2UK0IAI
А можно уточнить какие поля будут у такой таблицы - дерева?

Если в таблице для "дерева" обычно всего три поля =

ID_RECORD (КОД ...ТОВАРА)
ID_ROOT_RECORD (КОД РОДИТЕЛЯ = (КОД ГРУППЫ ТОВАРА)
NM_RECORD (ИМЯ ЗАПИСИ ....ИМЯ ТОВАРА)

то здесь надо добавить еще два-три поля

ID_KLASS_RECORD ( ТИП ЗАПИСИ - НЕКИЙ ШИФР ..ПОМОГАЕТ КЛАССИФИЦИРОВАТЬ АТРИБУТЫ)

ID_LINK_TO_RECORD

(ССЫЛКА (ЛИНК) НА НЕКИЙ УЗЕЛ В ДЕРЕВЕ ИЛИ СТРОКУ В ДЕРЕВЕ, ГДЕ В ЗАВИСИМОСТИ ОТ
ID_KLASS_RECORD ПЕРЕЧИСЛЕННЫ КОЛЛЕКЦИИ АТРИБУТОВ В СВОЕМ ПРОИЗВОЛЬНОМ НАБОРЕ)

ID_TIP_RECORD - (ЧТО ТО ... ТИПА ПРИЗНАКА... ЧТО ТАКОЕ "ПРОПИСАНО" (СТРОКА, УЗЕЛ, ССЫЛКА...) - СЕРВИСНОЕ ПОЛЕ, ПОМОГАЕТ "парсить" ДЕРЕВО).

Для доступа с дереву используются конструкции типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select  ID_RECORD               --- зачитали дерево товаров
from table_data
connect by prior  ID_RECORD =  ID_ROOT_RECORD
start with ID_ROOT_RECORD is null 

union 

select ID_RECORD          --- зачитали все атрибуты к товарам что есть "ссылки"
from table_data
connect by prior  ID_RECORD =  ID_ROOT_RECORD
start with ID_ROOT_RECORD in 
  
  (select ID_LINK_TO_RECORD 
   from table_data
   WHERE ID_TIP_RECORD = 'ССЫЛКА'
   connect by prior  ID_RECORD =  ID_ROOT_RECORD
   start with ID_ROOT_RECORD  is null
   )


В общем, мы сначала читаем все дерево "как есть", а потом дополнительно зачитываем строки дерева что имеют "ссылки" на другие узлы/строки дерева с помощью поля ID_LINK_TO_RECORD.

Это так сказать базовый алгоритм, практическая реализация может быть весьма изощренной.
Я как то использовал рекурсивный алгоритм, когда в зависимости от ID_KLASS_RECORD и проверки на NULL поля ID_LINK_TO_RECORD происходит автоматическая расшифровка дерева произвольной глубины и своим набором атрибутов, с записью результата во временную таблицу.

ИМХО, это все не для продакшион, ибо работает медленно.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Универсальный каталог "разношерстных" товаров.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]