|
|
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
Всем привет! Проектирую таблицы для карточки товаров. Товары с разными хар-ками: объем, масса, цвет и т.д. (список бесконечный). Для примера возьмем продукт "Молоко". У товара есть название (таблица товаров): Код: plaintext 1. Код: plaintext 1. 2. Пересечение "названий" и "Тэгов" оформил в таблицу: Код: plaintext 1. 2. 3. 4. т.е. из таблицы с тегами для определенного "Названия" товаров нужно развернуть (транспонировать) Тэги и получить по ним уникальный ключ: "Молоко, 900, 3.2 ..." (например, для Телевизора список характеристик будет больше). Вопрос хотел бы решить на чистом SQL и структуре таблиц. Таблица прайс-листа должна быть такой: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 09:51 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
lod2007Проектирую таблицы для карточки товаров. Для розницы и для производства это прилично различается, вам для чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 10:01 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
lod2007, Велосипед точно есть, называется EAV. Касательно Вашей проблемы - проще всего в таблицу с названиями занести N товаров "Молоко", по одному на каждую комбинацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 10:09 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
vmag, мне для учета цен по различным товарам (продукты питания, бытовая химия, бытовая техника) в основном ритейл (розница). Саму структуру названий и категорий товаров я сделал. Дошел до уровня карточка товара: "Сыр: голандский, жирность 65 %, масса 1 кг." - для этой записи получаем id, который используем уже в Прайс-листе. В одних и тех же таблицах хочу вести такие карточки товаров: Код: plaintext 1. 2. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 10:11 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
lod2007Всем привет! Код: plaintext 1. Код: plaintext 1. 2. Пересечение "названий" и "Тэгов" оформил в таблицу: Код: plaintext 1. 2. 3. 4. У вас в таблицах потеряна информация. Из процитированного совершенно не ясно, относится ли Жирность 3.2 к Объему 900, или объему 500, или это просто такое молоко без указанного объема, а с одной жирностью. Раз уж вам нужно много разного молока, то пусть остается справочник "Название продукта" с одной записью "Молоко", но нужно добавить таблицу "Продукт", со ссылкой на название. Там будет две записи, ссылающиеся на название "Молоко", и пересечение тегов пусть ссылается уже на продукт - 900 и 3.2 на первый продукт, 500 и 2.5 на второй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 10:26 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
lod2007По записям: Код: plaintext 1. Для розницы можно особо не заморачиваться, классификатор у вас уже есть, делайте таблицу товара на базе классификатора, в которой ID тупо счетчик или искусственный уникальный код. Плюс в рознице очень важно использовать штрих-код, без продажи сканером розница напоминает каменный век, сейчас пожалуй только в некоторых сетях "автозапчасти" продают по коду товара и то при наличии там нескольких касс и слабом потоке клиентов есть очередь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 10:29 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherУ вас в таблицах потеряна информация. Из процитированного совершенно не ясно, относится ли Жирность 3.2 к Объему 900, или объему 500, или это просто такое молоко без указанного объема, а с одной жирностью. Вы совершенно правы. Инфа потеряна специально. Хочу "впихнуть невпихуемое" в одну таблицу. Использую одну таблицу для "любых характеристик" разных сущностей. Таблица тэгов: цвет, масса, размер, объем, жирность, запах. Все значения по этим тегам храним в одной таблице. Согласитесь, что у пылесоса и хлеба может быть один тег с одинаковым названием: цвет: белый. А уж такой тег как масса - почти у всех товаров (продуктов). Многие делают так: Код: plaintext Я хочу все теги сделать в одну таблицу: Код: plaintext 1. 2. Код: plaintext 1. 2. 3. Т.е. должна получиться примерно такая таблица: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 11:05 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
Категорически не стоит выносить части названия товара в какие-то теги, а потом собирать их в строку. Название пусть живет своей жизнью. Тем более оно может в каких-то случаях отличаться от собранного по частям. Каждый вид товара (например один и тот же кетчуп дой-пак с дозатором или без) должен иметь отдельную карточку, т.к. у них может быть разная цена, спрос и т.д. Даже тип этикетки может быть важен, т.к. покупатель выбирает по этикетке. Пример ? Сырок "Дружба". :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 11:20 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisher, немного Вас запутал своим ответом, наверно. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 11:26 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
lod2007Многие делают так: Код: plaintext А ваш подход прокатит, если характеристик будет хотя бы два десятка, например как у ноутбука? Ведь уже тогда все перестановки дадут под миллион комбинаций, из которых большинство будут бессмысленные - типа крохотный 1 ГБ ОЗУ в сочетании с i7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 11:52 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
lod2007Многие делают так: Код: plaintext Такой подход "прокатывает" при любом количестве характеристик (хотя обоснованность наличия хотя бы 1000 характеристик для конкретного типа товара уже вызывает сомнение). Но это так, к слову - если нравится Вам подход с тэгами, можно использовать и его. lod2007 Я не утверждаю, что описанная мной таблица и подход правильный. Но другого способа учета пока придумать не могу. Вам уже несколько человек описали способ - сделать дополнительную таблицу товаров, и связывать характеристики-тэги не с названием, а с товаром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 11:54 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
lod2007Но другого способа учета пока придумать не могу.Вы придумали наихудший способ. :) Делайте отдельные карточки. Отдельные, Карл !!!! Пусть у каждой будет свой набор доп.параметров, литраж, цвет и т.д. Для поиска. Ну и что, что будет много карточек ? Это нормально. Это реальные товары. Отдельные. У них будут быть собственные цена/остаток/продажи и вообще жизненный цикл (поступление в систему, жизнь, выход из системы). Не делайте никаких "умножений свойств". Это аццкий тупик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 11:54 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
LSV, Cane Cat Fisher Спасибо за вентиляцию темы (в хорошем смысле). авторДелайте отдельные карточки. Отдельные, Карл !!!! Пусть у каждой будет свой набор доп.параметров, литраж, цвет и т.д. Для поиска. Ну и что, что будет много карточек ? Это нормально. Это реальные товары. Отдельные. LSV, я понял Вашу мысль. Отдельные карточки по схеме: Код: plaintext 1. Cane Cat Fisher, Задача сильно походит на перемножение тегов и хранения всех значений. Но цель не перемножить всё и хранить. А обеспечить возможность учета различных товаров. На примере: Код: plaintext 1. 2. 3. 4. Вы все верно написали: Должна быть таблица товаров, а к ним уже тэги-описатели. Я ещё поразмыслю, отпишу как в итоге получиться - или не получиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 12:29 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
Если б мне нужно было учитывать только телевизоры, или только "молочные" продукты. Я бы так и сделал: отдельные таблицы для каждого вида товаров с их индивидуальным перечнем характеристик. Но мне нужно учитывать различные товары в одной системе и разбивать их в БД по отдельным таблицам: TeleVisors, Notebooks - нет никакого желания. Скорей всего прийдеться либо делить на категории и под них сортировать карточки товаров (у телевизоров и ноутбуков - одни харки, в одной табице), у продуктов питания: сыпучих - одна таблица, у жидких другая, у штучных товаров - третья. Именно такого варианта я хотел бы избежать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 12:42 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherА ваш подход прокатит, если характеристик будет хотя бы два десятка, например как у ноутбука? Ведь уже тогда все перестановки дадут под миллион комбинаций, из которых большинство будут бессмысленные - типа крохотный 1 ГБ ОЗУ в сочетании с i7. Прокатит. еще больше он прокатывает при поиске: Выбираем общее название "Ноутбук", а дальше по id-названия в таблице тегов получаем все теги, которые там прописаны со значениями их характеристик. Чтобы найти ноутбук: 2 ТБ, ОЗУ 8, Черный. У Ноутбука в таблице тэгов должна совпасть комбинация тэгов: 2, 8, черный - это все храниться в "Одной Таблице", в "ОДНОМ поле", для всех типов товаров, Карл! Проблема у меня возникает чисто технического плана: по id=18, я получу записи: idProd | Unit | 18 2 18 8 18 черный теперь эти записи мне надо превратить в уникальную строку (или получить по ней или еще как-то уникальный идентификатор): 18+2+8+черный. И полученый номер я буду использовать в Прайс-Листе (аля товары, остаток на складе, планирование и т.д.). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 12:59 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
lod2007Если б мне нужно было учитывать только телевизоры, или только "молочные" продукты. Я бы так и сделал: отдельные таблицы для каждого вида товаров с их индивидуальным перечнем характеристик.Это тоже дичайший тупик. Ни в коем случае !!!!!!!!!!!!!! Пусть будет общая таблица-справочник: ИД/Название/ГруппаТовара/ТипКарточки(товар/сырьё/обезличивание/ОС и пр.) И набор отдельных х-к привязанных к конкретной карточке: цвет/размер/литраж и пр. Фильтрация по группе товара поможет ориентироваться по списку доп. параметров (параметры привязаны к группам товара для упрощения навигации по ним) Отдельно - модуль ценообразования: история цен, наценок, коэф., скидки, акции и пр. Стандартизируйте написание названий. Всё. Этого достаточно. Никакой избыточности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 13:08 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
lod2007теперь эти записи мне надо превратить в уникальную строку (или получить по ней или еще как-то уникальный идентификатор): 18+2+8+черный. И полученый номер я буду использовать в Прайс-Листе (аля товары, остаток на складе, планирование и т.д.). Не обижайтесь, но у вас произошло мысленное "залипание" на весьма странной и нетрадиционной идее. Отсюда и все непонятности и трудности. Так базы данных не делают. Прогуляйтесь на свежем воздухе, переосмыслите, сделайте явную таблицу товаров. Уникальный идентификатор будет в таблице товаров, от него попляшут и цены, и склад и все остальное. Теги будете подтягивать для поиска товара, и для вывода в любом удобном виде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 15:50 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
Кстати, идея с многими полями в одной таблице, как уже сказали, тоже вполне работоспособна, и имеет свои преимущества: простоту и эффективность запросов. Не выкидывайте идею. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 15:52 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherКстати, идея с многими полями в одной таблице, как уже сказали, тоже вполне работоспособна, и имеет свои преимущества: простоту и эффективность запросов. Не выкидывайте идею.только в одном случае: кол-во этих полей и их назначение заранее известно. Для общих случаев категорически не годиццо. зы: Возьмите для примера интернет-магазин, где параметров многие тыщи и постоянно добавляют новые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2016, 17:49 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherНе обижайтесь, но у вас произошло мысленное "залипание" на весьма странной и нетрадиционной идее. Отсюда и все непонятности и трудности. Так базы данных не делают. Прогуляйтесь на свежем воздухе, переосмыслите, сделайте явную таблицу товаров. Уникальный идентификатор будет в таблице товаров, от него попляшут и цены, и склад и все остальное. Теги будете подтягивать для поиска товара, и для вывода в любом удобном виде. Спасибо, Вы все правильно написали, и про "залипание" тоже :-). Ближе к вечеру я тоже осознал, что для таблицы "Товаров" уникальный id будет автоинкрементом, а уже к этому id нужно привязывать теги-атрибуты, а не наоборот (как я "зациклился" в первых постах). Собственно задача: нужна таблица уникальных по характеристикам товаров. Каждый товар имеет условное название (группу) и набор тэгов в рамках этой группы. Строение тега: "НазваниеТега" = значание. Для каждого "НазваниеТега" может быть много значений. Для примера возьмем такие записи (записано в читабельной форме): Код: plaintext 1. 2. Код: plaintext 1. Код: plaintext Решение. Структура таблиц ProductsNew - таблица Товары Код: plaintext 1. Код: plaintext 1. 2. Код: plaintext 1. 2. 3. Наполнение: Решение оформлено на Т-SQL Код: sql Если запрос вернул 0 записей, тогда в таблицу ProductsNew вставляем "новый продукт", а в TagsName и Тags добавляем соответствующие записи. Иначе запрос вернет id уникального товара из таблицы ProductsNew . Для Молока (idName=190 ) запрос возвращает idProd=3, а для Кефира (idName=160) возвращает idProd=1. Большое Спасибо "LSV", "Cane Cat Fisher" и всем отписавшимся за конструктивную помощь. На выходных еще причешу код и потестирую. Но по первым тестам вроде все работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2016, 01:01 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
Молодец изобрел EAV ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2016, 02:47 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
SERG1257Молодец изобрел EAV Это Кот Матроскин наколдовал... Потом правда пытался ТС а отправить в другую лузу, но чары оказались сильнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2016, 09:00 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
А ещё мерещится будущее проекта ТС в рознице: - встанет проблема печати ценника с нормальным, понятным, коротким названием типа: lod2007 Код: plaintext и тут окажется, что цвет пасты, перечень красителей, консервантов, длина тюбика, размер дырки и прочей лабуды это мусор - придется делать отдельную таблицу для ценников - потом окажется, что все эти "теги" заполнять некому и незачем ибо всё это есть на товаре от производителя - потом окажется что таблица ценников - это как раз то, что нужно для работы, но искать уже в ней придется по контексту и наконец придет мысль, что нужно было с самого начала делать структурированный классификатор и вешать его на таблицу товар (можно сделать самый простой, жесткий, на 2, а лучше 3 уровня) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2016, 09:15 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
Да, про EAV узнал только вчера. А на русском в книжках только сегодня посмотрел и обнаружил там запросы такие же, как я написал выше. Велосипед - зато сам разобрался. vmagА ещё мерещится будущее проекта ТС в рознице: - встанет проблема печати ценника с нормальным, понятным, коротким названием типа: lod2007 Код: plaintext и тут окажется, что цвет пасты, перечень красителей, консервантов, длина тюбика, размер дырки и прочей лабуды это мусор - придется делать отдельную таблицу для ценников - потом окажется, что все эти "теги" заполнять некому и незачем ибо всё это есть на товаре от производителя - потом окажется что таблица ценников - это как раз то, что нужно для работы, но искать уже в ней придется по контексту и наконец придет мысль, что нужно было с самого начала делать структурированный классификатор и вешать его на таблицу товар (можно сделать самый простой, жесткий, на 2, а лучше 3 уровня) Задачу решаю не для интернет-магазина, а для учета различных товаров (читай бухгалтерия для мелкой фирмы, но не уровня 1С). Карточка товара - только на экране монитора, поэтому в "Представлении" на стороне клиента будет визуализирована по ходу "пьесы". Сейчас прорабатываю "физику-математику" учета, вот столкнулся с "карточкой товара" - на форуме ответили и направили в нужном направлении. vmag, Прокомментирую по порядку описанных вопросов: 1. Для понятного названия - предполагаю "рейтинг атрибутов" - печатать только первые (основные хар-ки). Мусор конечно будет - но постоянно его весь отображать не будет необходимости, со временем "карточка товара" причешится до минимального кол-ва атрибутов для каждого товара. Сейчас не могу агрегировать свойства в группы (телевизоры отдельно, продукты питания отдельно). Поэтому делаю по схеме EAV - прорабатываю, получится или нет. 2. Отдельная таблица для ценников - возможно 3. Абсолютно все теги заполнять не нужно будет. Только минимальные, чтобы отличить "молоко 2.5%" от "молоко 3.5%" - все виды жирности по всей планете описывать не нужно (мало вероятна такая ситуация). Вероятность учета всех ЖК Телевизоров со всеми их характеристиками так же очень мала. Нужно пробовать. 4. если б задача была склад "Аптека" или склад "Компьютерный магазин" - соответственно и структура хар-тик и проработка более/менее была бы ясна (глубина уровней и прочего). Тему со структурированным классификатором не отбрасываю, но пока не вижу структурированных "карточек товаров" в своей системе. vmag, спасибо за наводки, есть на что обратить внимание. В целом конечно хорошо бы прочитать: "каталог для интернет-магазина делается так-то", структура таблиц и схема данных - такая то. Но где это написано? вот и приходиться изобретать велосипед. Конечно, умники скажут: нужен интернет-магазин или складской учет, купи готовую "коробку" от 1С-Битрикс или 1С-Бухгалтерия. Склад. Но я программист, мне интересна схема и возможные варианты этой схемы под различные ситуации, а не готовые продукты в которых все уже зашито. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2016, 12:59 |
|
||
|
Карточка товара. Прайс-лист.
|
|||
|---|---|---|---|
|
#18+
А теперь про несколько неприятных граблей от EAV 1 Прикинь физику процесса вытаскивания одной строки по идентификатору - сколько чтений надо сделать. Количество будет пропорционально количеству атрибутов (тэгов). Сравни с 1 - ровно одно чтение в таблице с классической структуры с полями (тэгами) 2 Все становится еще хуже, когда ты делаешь поиск, причем не по одному полю, а по нескольким. Сравни с индексированным поиском Проблемы с поиском настолько серьезны, что проще добавить тэги полями для поиска в таблицу ProductNew. По факту система будет состоять из двух - нормальной быстрой в поиске и извлечении части и остальным "мусором" и тебе придется либо переписывать все запросы, либо держать данные в обоих и молится чтобы они не рассинхронизировались. 3 Тебе это вряд ли покажется важным, но при EAV СУБД самоустраняется от поддержания целостности. Там, где бы она бы заругалась: "нет такой таблицы", "нет такого поля", "нельзя сохранить описание в поле с типом int", "неверный формат даты", "нарушение уникального ключа", в случае EAV СУБД будет пофиг и все придется реализовать программисту, а ошибки отлавливать пользователю. Ты пропустил еще один момент (кстати указанный в вики) - интеграцию с другими системами Если все поставщики тебе посылают товар в виде XML, то имеет смысл его хранить в виде XML, а не EAV XML в реалицазии тоже не сахар (тяжелый и медленный по сравнению с обычной структурой), но он стандартный и работать с ним СУБД умеет, то бишь можешь переложить часть работы на нее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2016, 15:59 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39243866&tid=1540334]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 285ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...