powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Карточка товара. Прайс-лист.
25 сообщений из 32, страница 1 из 2
Карточка товара. Прайс-лист.
    #39243686
lod2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Проектирую таблицы для карточки товаров. Товары с разными хар-ками: объем, масса, цвет и т.д. (список бесконечный).
Для примера возьмем продукт "Молоко".
У товара есть название (таблица товаров):
Код: plaintext
1.
id  | NameProd
18   Молоко
Соответственно хар-ки выделил в таблицу Тэгов.
Код: plaintext
1.
2.
id | TagName
1    Объем
2    Жирность
Уникальный товар определяется: Название + тег1+ тег2+Тег3...
Пересечение "названий" и "Тэгов" оформил в таблицу:
Код: plaintext
1.
2.
3.
4.
idProd | Units | idTag
18         900       1
18         3.2       2
18         500       1
18         2.5       2
Внимание, вопрос: как получить уникальный идентификатор товара для таблицы "Прайс-лист" при такой конструкции?
т.е. из таблицы с тегами для определенного "Названия" товаров нужно развернуть (транспонировать) Тэги и получить по ним уникальный ключ: "Молоко, 900, 3.2 ..." (например, для Телевизора список характеристик будет больше).
Вопрос хотел бы решить на чистом SQL и структуре таблиц.
Таблица прайс-листа должна быть такой:
Код: plaintext
1.
idТовараПоХар_кам (int)        | цена (float)
    (Молоко, 900, 3.2)              30.25
Может такой велосипед уже есть, и кто-то даст ссылку на структуру таблиц? Может где-то логическая ошибка в рассуждениях, подскажите, форумчане!?
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243699
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lod2007Проектирую таблицы для карточки товаров.

Для розницы и для производства это прилично различается, вам для чего?
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243713
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lod2007,
Велосипед точно есть, называется EAV.
Касательно Вашей проблемы - проще всего в таблицу с названиями занести N товаров "Молоко", по одному на каждую комбинацию.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243718
lod2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag, мне для учета цен по различным товарам (продукты питания, бытовая химия, бытовая техника) в основном ритейл (розница).
Саму структуру названий и категорий товаров я сделал. Дошел до уровня карточка товара:
"Сыр: голандский, жирность 65 %, масса 1 кг." - для этой записи получаем id, который используем уже в Прайс-листе.
В одних и тех же таблицах хочу вести такие карточки товаров:
Код: plaintext
1.
2.
"Сыр - голандский: жирность 65 %, масса 1 кг."
"Молоко: Успенское, 3.2%, 900 мл"
"Зубная паста: бледный-мент, 75 мл."
По записям:
Код: plaintext
1.
2.
"Зубная паста: бледный-мент, 75 мл." - один id, который используем в таблице Прайс-лист
"Зубная паста: бледный-мент, 150 мл."- другой id, который используем в таблице Прайс-лист
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243737
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lod2007Всем привет!
Код: plaintext
1.
id  | NameProd
18   Молоко
Соответственно хар-ки выделил в таблицу Тэгов.
Код: plaintext
1.
2.
id | TagName
1    Объем
2    Жирность
Уникальный товар определяется: Название + тег1+ тег2+Тег3...
Пересечение "названий" и "Тэгов" оформил в таблицу:
Код: plaintext
1.
2.
3.
4.
idProd | Units | idTag
18         900       1
18         3.2       2
18         500       1
18         2.5       2


У вас в таблицах потеряна информация. Из процитированного совершенно не ясно, относится ли Жирность 3.2 к Объему 900, или объему 500, или это просто такое молоко без указанного объема, а с одной жирностью.

Раз уж вам нужно много разного молока, то пусть остается справочник "Название продукта" с одной записью "Молоко", но нужно добавить таблицу "Продукт", со ссылкой на название. Там будет две записи, ссылающиеся на название "Молоко", и пересечение тегов пусть ссылается уже на продукт - 900 и 3.2 на первый продукт, 500 и 2.5 на второй.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243739
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lod2007По записям:
Код: plaintext
1.
"Зубная паста: бледный-мент, 75 мл." - один id, который используем в таблице Прайс-лист
"Зубная паста: бледный-мент, 150 мл."- другой id, который используем в таблице Прайс-лист


Для розницы можно особо не заморачиваться, классификатор у вас уже есть, делайте таблицу товара на базе классификатора, в которой ID тупо счетчик или искусственный уникальный код. Плюс в рознице очень важно использовать штрих-код, без продажи сканером розница напоминает каменный век, сейчас пожалуй только в некоторых сетях "автозапчасти" продают по коду товара и то при наличии там нескольких касс и слабом потоке клиентов есть очередь
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243772
lod2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cane Cat FisherУ вас в таблицах потеряна информация. Из процитированного совершенно не ясно, относится ли Жирность 3.2 к Объему 900, или объему 500, или это просто такое молоко без указанного объема, а с одной жирностью.
Вы совершенно правы. Инфа потеряна специально. Хочу "впихнуть невпихуемое" в одну таблицу. Использую одну таблицу для "любых характеристик" разных сущностей.
Таблица тэгов: цвет, масса, размер, объем, жирность, запах. Все значения по этим тегам храним в одной таблице. Согласитесь, что у пылесоса и хлеба может быть один тег с одинаковым названием: цвет: белый. А уж такой тег как масса - почти у всех товаров (продуктов).
Многие делают так:
Код: plaintext
id | Название Продукта |  масса | цвет | объем |  - и т.д. поехали все тэги выстраивать в строку.
Когда по некоторым товаам кол-во характеристик зашкаливает - такой подход не прокатывает.
Я хочу все теги сделать в одну таблицу:
Код: plaintext
1.
2.
id Тега|  Название тега 
1                 масса         
2                 объем
Тогда, для каждого названия продукта:
Код: plaintext
1.
2.
3.
id | idProd | idТэг | ЗначениеТэга
20   18          2         900
21   18          2         600
Вопрос возникает в получении идентификатора, когда Тэгов много.
Т.е. должна получиться примерно такая таблица:
Код: plaintext
1.
id | id тэгов, сумма которых однозначно характеризуют товар | Хэш-собственно id который нужно получить
 1      "20,21"                                                                   хэш от ( "20,21")
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243797
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Категорически не стоит выносить части названия товара в какие-то теги, а потом собирать их в строку.
Название пусть живет своей жизнью. Тем более оно может в каких-то случаях отличаться от собранного по частям.
Каждый вид товара (например один и тот же кетчуп дой-пак с дозатором или без) должен иметь отдельную карточку, т.к. у них может быть разная цена, спрос и т.д.
Даже тип этикетки может быть важен, т.к. покупатель выбирает по этикетке. Пример ? Сырок "Дружба". :)
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243813
lod2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cane Cat Fisher, немного Вас запутал своим ответом, наверно.
Код: plaintext
1.
2.
3.
4.
5.
Пересечение "названий" и "Тэгов" оформил в таблицу:
idProd | Units | idTag
18         900       1
18         3.2       2
18         500       1
18         2.5       2
При помощи этой таблицы я могу хранить значения по тегам для Названий товаров. Перемножение тэгов дает уникалное описание товара: "молоко, 900, 3.2" - один товар, "молоко, 500, 3.2" - другой товар,"молоко, 500, 2.5" - третий товар, "молоко, 500, 3.2" - четвертый товар. Условия выборки: в рамках одного idProd, сочетание idTag(1,2) - должно быть уникальным. Т.е. по сути дела уникальность дает разница в значении одного атрибута. Для всех вариаций атрибута надо как-то получить уникальный id (типа хэшем) -и потом уже его использовать дальше в Прайс-листе. Я не утверждаю, что описанная мной таблица и подход правильный. Но другого способа учета пока придумать не могу.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243866
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lod2007Многие делают так:
Код: plaintext
id | Название Продукта |  масса | цвет | объем |  - и т.д. поехали все тэги выстраивать в строку.
Когда по некоторым товаам кол-во характеристик зашкаливает - такой подход не прокатывает.


А ваш подход прокатит, если характеристик будет хотя бы два десятка, например как у ноутбука? Ведь уже тогда все перестановки дадут под миллион комбинаций, из которых большинство будут бессмысленные - типа крохотный 1 ГБ ОЗУ в сочетании с i7.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243871
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lod2007Многие делают так:
Код: plaintext
id | Название Продукта |  масса | цвет | объем |  - и т.д. поехали все тэги выстраивать в строку.
Когда по некоторым товаам кол-во характеристик зашкаливает - такой подход не прокатывает.

Такой подход "прокатывает" при любом количестве характеристик (хотя обоснованность наличия хотя бы 1000 характеристик для конкретного типа товара уже вызывает сомнение). Но это так, к слову - если нравится Вам подход с тэгами, можно использовать и его.

lod2007 Я не утверждаю, что описанная мной таблица и подход правильный. Но другого способа учета пока придумать не могу.
Вам уже несколько человек описали способ - сделать дополнительную таблицу товаров, и связывать характеристики-тэги не с названием, а с товаром.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243872
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lod2007Но другого способа учета пока придумать не могу.Вы придумали наихудший способ. :)
Делайте отдельные карточки. Отдельные, Карл !!!!
Пусть у каждой будет свой набор доп.параметров, литраж, цвет и т.д. Для поиска.
Ну и что, что будет много карточек ? Это нормально.
Это реальные товары. Отдельные.
У них будут быть собственные цена/остаток/продажи и вообще жизненный цикл (поступление в систему, жизнь, выход из системы).

Не делайте никаких "умножений свойств". Это аццкий тупик.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243945
lod2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LSV, Cane Cat Fisher Спасибо за вентиляцию темы (в хорошем смысле).
авторДелайте отдельные карточки. Отдельные, Карл !!!!
Пусть у каждой будет свой набор доп.параметров, литраж, цвет и т.д. Для поиска.
Ну и что, что будет много карточек ? Это нормально.
Это реальные товары. Отдельные.
LSV, я понял Вашу мысль. Отдельные карточки по схеме:
Код: plaintext
1.
id | Название Продукта |  масса | цвет       | объем ОЗУ | 
1     Ноутбук            4,5        черный        8 ГБ
авторА ваш подход прокатит, если характеристик будет хотя бы два десятка, например как у ноутбука? Ведь уже тогда все перестановки дадут под миллион комбинаций, из которых большинство будут бессмысленные - типа крохотный 1 ГБ ОЗУ в сочетании с i7.
Cane Cat Fisher, Задача сильно походит на перемножение тегов и хранения всех значений. Но цель не перемножить всё и хранить. А обеспечить возможность учета различных товаров.
На примере:
Код: plaintext
1.
2.
3.
4.
Хлеб,  белый, 400 г., производитель: ИП Пуров
Хлеб,  Черный, 400 г., производитель: ИП Пуров
Лук, заленый, пучек 20 гр.
Лук, репчатый, 1 кг.
Как организовать такие карточки!? Я вижу только один выход: "Название" отдельно, а то, что расширяет название (характеристики-тэги) отдельно, но вместе они должны идентифицировать товар.
Вы все верно написали: Должна быть таблица товаров, а к ним уже тэги-описатели. Я ещё поразмыслю, отпишу как в итоге получиться - или не получиться.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243965
lod2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если б мне нужно было учитывать только телевизоры, или только "молочные" продукты. Я бы так и сделал: отдельные таблицы для каждого вида товаров с их индивидуальным перечнем характеристик.
Но мне нужно учитывать различные товары в одной системе и разбивать их в БД по отдельным таблицам: TeleVisors, Notebooks - нет никакого желания. Скорей всего прийдеться либо делить на категории и под них сортировать карточки товаров (у телевизоров и ноутбуков - одни харки, в одной табице), у продуктов питания: сыпучих - одна таблица, у жидких другая, у штучных товаров - третья.
Именно такого варианта я хотел бы избежать.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243987
lod2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cane Cat FisherА ваш подход прокатит, если характеристик будет хотя бы два десятка, например как у ноутбука? Ведь уже тогда все перестановки дадут под миллион комбинаций, из которых большинство будут бессмысленные - типа крохотный 1 ГБ ОЗУ в сочетании с i7.
Прокатит. еще больше он прокатывает при поиске:
Выбираем общее название "Ноутбук", а дальше по id-названия в таблице тегов получаем все теги, которые там прописаны со значениями их характеристик. Чтобы найти ноутбук: 2 ТБ, ОЗУ 8, Черный. У Ноутбука в таблице тэгов должна совпасть комбинация тэгов: 2, 8, черный - это все храниться в "Одной Таблице", в "ОДНОМ поле", для всех типов товаров, Карл! Проблема у меня возникает чисто технического плана:
по id=18, я получу записи:
idProd | Unit |
18 2
18 8
18 черный

теперь эти записи мне надо превратить в уникальную строку (или получить по ней или еще как-то уникальный идентификатор): 18+2+8+черный. И полученый номер я буду использовать в Прайс-Листе (аля товары, остаток на складе, планирование и т.д.).
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39243991
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lod2007Если б мне нужно было учитывать только телевизоры, или только "молочные" продукты. Я бы так и сделал: отдельные таблицы для каждого вида товаров с их индивидуальным перечнем характеристик.Это тоже дичайший тупик.
Ни в коем случае !!!!!!!!!!!!!!
Пусть будет общая таблица-справочник: ИД/Название/ГруппаТовара/ТипКарточки(товар/сырьё/обезличивание/ОС и пр.)
И набор отдельных х-к привязанных к конкретной карточке: цвет/размер/литраж и пр.
Фильтрация по группе товара поможет ориентироваться по списку доп. параметров (параметры привязаны к группам товара для упрощения навигации по ним)
Отдельно - модуль ценообразования: история цен, наценок, коэф., скидки, акции и пр.
Стандартизируйте написание названий.

Всё. Этого достаточно. Никакой избыточности.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39244188
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lod2007теперь эти записи мне надо превратить в уникальную строку (или получить по ней или еще как-то уникальный идентификатор): 18+2+8+черный. И полученый номер я буду использовать в Прайс-Листе (аля товары, остаток на складе, планирование и т.д.).

Не обижайтесь, но у вас произошло мысленное "залипание" на весьма странной и нетрадиционной идее. Отсюда и все непонятности и трудности.

Так базы данных не делают. Прогуляйтесь на свежем воздухе, переосмыслите, сделайте явную таблицу товаров. Уникальный идентификатор будет в таблице товаров, от него попляшут и цены, и склад и все остальное. Теги будете подтягивать для поиска товара, и для вывода в любом удобном виде.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39244191
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, идея с многими полями в одной таблице, как уже сказали, тоже вполне работоспособна, и имеет свои преимущества: простоту и эффективность запросов. Не выкидывайте идею.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39244272
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherКстати, идея с многими полями в одной таблице, как уже сказали, тоже вполне работоспособна, и имеет свои преимущества: простоту и эффективность запросов. Не выкидывайте идею.только в одном случае: кол-во этих полей и их назначение заранее известно.
Для общих случаев категорически не годиццо.

зы: Возьмите для примера интернет-магазин, где параметров многие тыщи и постоянно добавляют новые.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39244436
lod2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cane Cat FisherНе обижайтесь, но у вас произошло мысленное "залипание" на весьма странной и нетрадиционной идее. Отсюда и все непонятности и трудности. Так базы данных не делают. Прогуляйтесь на свежем воздухе, переосмыслите, сделайте явную таблицу товаров. Уникальный идентификатор будет в таблице товаров, от него попляшут и цены, и склад и все остальное. Теги будете подтягивать для поиска товара, и для вывода в любом удобном виде.
Спасибо, Вы все правильно написали, и про "залипание" тоже :-). Ближе к вечеру я тоже осознал, что для таблицы "Товаров" уникальный id будет автоинкрементом, а уже к этому id нужно привязывать теги-атрибуты, а не наоборот (как я "зациклился" в первых постах).
Собственно задача: нужна таблица уникальных по характеристикам товаров. Каждый товар имеет условное название (группу) и набор тэгов в рамках этой группы. Строение тега: "НазваниеТега" = значание. Для каждого "НазваниеТега" может быть много значений.
Для примера возьмем такие записи (записано в читабельной форме):
Код: plaintext
1.
2.
"Молоко, жирность 3.2 %, объем 900 мл"
"Молоко, жирность 2.5 %, объем 900 мл"
"Кефир, жирность 2.5 %, объем 900 мл"
Задача сводиться к тому, чтобы вернуть id товара по его хар-кам, и не допустить в справочнике двух одинаковых товаров:
Код: plaintext
1.
"Молоко, жирность 2.5 %, объем 900 мл"
"Молоко, жирность 2.5 %, объем 900 мл"
Однако,
Код: plaintext
"Молоко, жирность 2.7 %, объем 900 мл" 
будет новым товаром, его нужно добавить в справочник.
Решение. Структура таблиц
ProductsNew - таблица Товары
Код: plaintext
1.
 id - идентификатор, автоинкремент
 idName - ссылка на название (id группы, в рамках которой товар должен различаться по хар-кам)
TagsName - таблица Тэгов (характеристик)
Код: plaintext
1.
2.
 id - идентификатор
 TagName - название характеристики
 Unit - еденица измерения
Tags - таблица значений Тэгов (связывает товар с его характеристиками)
Код: plaintext
1.
2.
3.
 id - идентификатор (скорей всего будет не нужен)
 idProd - ссылка на id товара
 idTagName - ссылка на id Тэга (характеристика)
 Value - значение характеристики
Связи:

Наполнение:

Решение оформлено на Т-SQL
Код: sql
\r\n-- 1. Узнаем, сколько характеристик (тэгов) может быть по продукту, максимально          \r\nDeclare @Max int; -- максимальное кол-во характеристик по конкретному товару.\r\nselect @Max=MAX(COL) from (\r\n   -- кол-во характеристик в разрезе каждого товара\r\n   select COUNT(*) as col,idprod  from tags where idprod in (select id from ProductsNew where idname=160)\r\n    group by idprod) a\r\n-- 2. Проверяем, есть ли с задаными характеристиками (хар-ки отправляет клиентское приложение) Товар или нет. На вход указываем: \r\n  -- idName - id группы (в нашем примере idName=190 -  Молоко; 160 - Кефир);\r\n  -- idTagName - id Тэгов, характерных для нашей группы;\r\n  -- value - список значений тэгов\r\nSelect idprod from tags where idprod in (select id from ProductsNew where idName=160)\r\n          and  idTagName in (1,2) -- строку "1,2" формирует клиентское приложение\r\n          and value in(900,2.5)  -- список значений "900,2.5" формирует клиентское приложение\r\n    group by idprod having COUNT(*) = @Max\r\n
\r\n
Если запрос вернул 0 записей, тогда в таблицу ProductsNew вставляем "новый продукт", а в TagsName и Тags добавляем соответствующие записи.
Иначе запрос вернет id уникального товара из таблицы ProductsNew . Для Молока (idName=190 ) запрос возвращает idProd=3, а для Кефира (idName=160) возвращает idProd=1.
Большое Спасибо "LSV", "Cane Cat Fisher" и всем отписавшимся за конструктивную помощь. На выходных еще причешу код и потестирую. Но по первым тестам вроде все работает.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39244455
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодец изобрел EAV
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39244525
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Молодец изобрел EAV

Это Кот Матроскин наколдовал...
Потом правда пытался ТС а отправить в другую лузу, но чары оказались сильнее
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39244538
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё мерещится будущее проекта ТС в рознице:
- встанет проблема печати ценника с нормальным, понятным, коротким названием типа:
lod2007
Код: plaintext
"Зубная паста: бледный-мент, 75 мл."

и тут окажется, что цвет пасты, перечень красителей, консервантов, длина тюбика, размер дырки и прочей лабуды это мусор
- придется делать отдельную таблицу для ценников
- потом окажется, что все эти "теги" заполнять некому и незачем ибо всё это есть на товаре от производителя
- потом окажется что таблица ценников - это как раз то, что нужно для работы, но искать уже в ней придется по контексту и наконец придет мысль, что нужно было с самого начала делать структурированный классификатор и вешать его на таблицу товар (можно сделать самый простой, жесткий, на 2, а лучше 3 уровня)
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39244818
lod2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, про EAV узнал только вчера. А на русском в книжках только сегодня посмотрел и обнаружил там запросы такие же, как я написал выше. Велосипед - зато сам разобрался.
vmagА ещё мерещится будущее проекта ТС в рознице:
- встанет проблема печати ценника с нормальным, понятным, коротким названием типа:
lod2007
Код: plaintext
"Зубная паста: бледный-мент, 75 мл."

и тут окажется, что цвет пасты, перечень красителей, консервантов, длина тюбика, размер дырки и прочей лабуды это мусор
- придется делать отдельную таблицу для ценников
- потом окажется, что все эти "теги" заполнять некому и незачем ибо всё это есть на товаре от производителя
- потом окажется что таблица ценников - это как раз то, что нужно для работы, но искать уже в ней придется по контексту и наконец придет мысль, что нужно было с самого начала делать структурированный классификатор и вешать его на таблицу товар (можно сделать самый простой, жесткий, на 2, а лучше 3 уровня)
Задачу решаю не для интернет-магазина, а для учета различных товаров (читай бухгалтерия для мелкой фирмы, но не уровня 1С). Карточка товара - только на экране монитора, поэтому в "Представлении" на стороне клиента будет визуализирована по ходу "пьесы". Сейчас прорабатываю "физику-математику" учета, вот столкнулся с "карточкой товара" - на форуме ответили и направили в нужном направлении.
vmag, Прокомментирую по порядку описанных вопросов:
1. Для понятного названия - предполагаю "рейтинг атрибутов" - печатать только первые (основные хар-ки). Мусор конечно будет - но постоянно его весь отображать не будет необходимости, со временем "карточка товара" причешится до минимального кол-ва атрибутов для каждого товара. Сейчас не могу агрегировать свойства в группы (телевизоры отдельно, продукты питания отдельно). Поэтому делаю по схеме EAV - прорабатываю, получится или нет.
2. Отдельная таблица для ценников - возможно
3. Абсолютно все теги заполнять не нужно будет. Только минимальные, чтобы отличить "молоко 2.5%" от "молоко 3.5%" - все виды жирности по всей планете описывать не нужно (мало вероятна такая ситуация). Вероятность учета всех ЖК Телевизоров со всеми их характеристиками так же очень мала. Нужно пробовать.
4. если б задача была склад "Аптека" или склад "Компьютерный магазин" - соответственно и структура хар-тик и проработка более/менее была бы ясна (глубина уровней и прочего). Тему со структурированным классификатором не отбрасываю, но пока не вижу структурированных "карточек товаров" в своей системе.
vmag, спасибо за наводки, есть на что обратить внимание.
В целом конечно хорошо бы прочитать: "каталог для интернет-магазина делается так-то", структура таблиц и схема данных - такая то. Но где это написано? вот и приходиться изобретать велосипед. Конечно, умники скажут: нужен интернет-магазин или складской учет, купи готовую "коробку" от 1С-Битрикс или 1С-Бухгалтерия. Склад. Но я программист, мне интересна схема и возможные варианты этой схемы под различные ситуации, а не готовые продукты в которых все уже зашито.
...
Рейтинг: 0 / 0
Карточка товара. Прайс-лист.
    #39245048
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А теперь про несколько неприятных граблей от EAV
1 Прикинь физику процесса вытаскивания одной строки по идентификатору - сколько чтений надо сделать. Количество будет пропорционально количеству атрибутов (тэгов). Сравни с 1 - ровно одно чтение в таблице с классической структуры с полями (тэгами)
2 Все становится еще хуже, когда ты делаешь поиск, причем не по одному полю, а по нескольким. Сравни с индексированным поиском
Проблемы с поиском настолько серьезны, что проще добавить тэги полями для поиска в таблицу ProductNew.
По факту система будет состоять из двух - нормальной быстрой в поиске и извлечении части и остальным "мусором" и тебе придется либо переписывать все запросы, либо держать данные в обоих и молится чтобы они не рассинхронизировались.

3 Тебе это вряд ли покажется важным, но при EAV СУБД самоустраняется от поддержания целостности. Там, где бы она бы заругалась: "нет такой таблицы", "нет такого поля", "нельзя сохранить описание в поле с типом int", "неверный формат даты", "нарушение уникального ключа", в случае EAV СУБД будет пофиг и все придется реализовать программисту, а ошибки отлавливать пользователю.

Ты пропустил еще один момент (кстати указанный в вики) - интеграцию с другими системами
Если все поставщики тебе посылают товар в виде XML, то имеет смысл его хранить в виде XML, а не EAV
XML в реалицазии тоже не сахар (тяжелый и медленный по сравнению с обычной структурой), но он стандартный и работать с ним СУБД умеет, то бишь можешь переложить часть работы на нее.
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Карточка товара. Прайс-лист.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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