powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Организация атрибутов для товара
12 сообщений из 12, страница 1 из 1
Организация атрибутов для товара
    #36237518
Фотография INOKENTiY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте
Есть задача сделать для товаров интернет-магазина систему атрибутов. Цели две сделать простые обособленные атрибуты и сделать группы атрибутов, то есть в группу может входить несколько атрибутов например цвет красный, ширина 100мм, высота 100мм и этой группе назначается количество, цена. В oscommerce очень не удобно сделано, но идею табличек можно позаимствовать, возможно есть какие-то другие движки с хорошей реализацией данной проблемы.
Помогите пожалуйста спроектировать таблицы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
-- Таблица для сохранения названия атрибута
CREATE TABLE `products_options` (
  `products_options_id` int( 11 ) NOT NULL default '0',
  `language_id` int( 11 ) NOT NULL default '1',
  `products_options_name` varchar( 255 ) NOT NULL default '',
  `products_options_length` int( 11 ) NOT NULL default '32',
  `products_options_size` int( 11 ) NOT NULL default '32',
  `products_options_rows` int( 11 ) NOT NULL default '4',
  `products_options_type` int( 11 ) NOT NULL,
  PRIMARY KEY  (`products_options_id`,`language_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- Таблица для сохранения значений атрибутов
CREATE TABLE `products_options_values` (
  `products_options_values_id` int( 11 ) NOT NULL default '0',
  `language_id` int( 11 ) NOT NULL default '1',
  `products_options_values_name` varchar( 255 ) NOT NULL default '',
  `products_options_values_description` text,
  `products_options_values_text` varchar( 255 ) NOT NULL default '',
  `products_options_values_image` varchar( 255 ) NOT NULL default '',
  `products_options_values_link` varchar( 255 ) NOT NULL default '',
  PRIMARY KEY  (`products_options_values_id`,`language_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- Таблица для связи атрибутов и их значений, много-ко-многим
CREATE TABLE `products_options_values_to_products_options` (
  `products_options_values_to_products_options_id` int( 11 ) NOT NULL auto_increment,
  `products_options_id` int( 11 ) NOT NULL,
  `products_options_values_id` int( 11 ) NOT NULL,
  PRIMARY KEY  (`products_options_values_to_products_options_id`)
) ENGINE=MyISAM AUTO_INCREMENT= 6  DEFAULT CHARSET=utf8 AUTO_INCREMENT= 6  ;

-- Таблица для привязки атрибутов и их значений к товару и установка цены, тут цена ставится в зависимости от каждого значения атрибута, добавил поле group_id если там не нуль тогда это группа и будут брать данные про цену и количество из таблицы products_group_attributes нижу
CREATE TABLE `products_attributes` (
  `products_attributes_id` int( 11 ) NOT NULL auto_increment,
  `products_id` int( 11 ) NOT NULL,
  `options_id` int( 11 ) NOT NULL,
  `options_values_id` int( 11 ) NOT NULL,
  `options_values_price` decimal( 15 , 4 ) NOT NULL,
  `price_prefix` char( 1 ) NOT NULL,
  `attributes_model` varchar( 255 ) default NULL,
  `attributes_stock` int( 4 ) default NULL,
  `options_values_weight` decimal( 15 , 4 ) NOT NULL,
  `weight_prefix` char( 1 ) NOT NULL,
  `sortorder` int( 11 ) default NULL,
  `group_id` int( 11 ) default NULL,
  PRIMARY KEY  (`products_attributes_id`),
  KEY `PRODUCTS_ID_INDEX` (`products_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

-- я решил сделать еще одну табл
CREATE TABLE `products_group_attributes` (
  `group_attributes_id` int( 11 ) NOT NULL auto_increment,
  `group_attributes_name` varchar( 100 ) default NULL,
  `options_values_price` decimal( 15 , 4 ) NOT NULL,
  `price_prefix` char( 1 ) NOT NULL,
  `attributes_model` varchar( 255 ) default NULL,
  `attributes_stock` int( 4 ) default NULL,
  `sortorder` int( 11 ) default NULL, 
   PRIMARY KEY  (`group_attributes_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
Мне этот вариант не очень нравится...
...
Рейтинг: 0 / 0
Организация атрибутов для товара
    #36237838
Simpliest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
INOKENTiY в группу может входить несколько атрибутов например цвет красный, ширина 100мм, высота 100мм и этой группе назначается количество, цена.
Эм? Какие еще группы атрибутов?

И кому назначается количество и цена? :)

Т.е. все что имеет габариты 100х100 и красный цвет будет стоить одинаково? :)
И пофиг кусок шелка это, картина, или напольная плитка :)
...
Рейтинг: 0 / 0
Организация атрибутов для товара
    #36237876
Фотография INOKENTiY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет чуточку не так вот смотрите http://www.nokianclub.com.ua/product_info.php?products_id=4
вот шина Nokian Hakkapeliitta 4 но у нее есть куча моделей, вот и есть группы атрибутов из Размера, Типа, Сезонности и тд.
...
Рейтинг: 0 / 0
Организация атрибутов для товара
    #36238145
Simpliest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
INOKENTiY
вот шина Nokian Hakkapeliitta 4 но у нее есть куча моделей, вот и есть группы атрибутов из Размера, Типа, Сезонности и тд.
Так просто не получится.
Это у вас получаются произвольное число ключевых полей в случае выборки по полю цена.

Как вариант -
Рекомендую сам товар представить как группу товаров. А дальше с каждой моделью работать как с обычным товаром.

Т.е.
категория "шины"
---подкатегория "Nokian"
------подкатегория "Hakkapeliitta 4"
---------ИД1 зимняя красная размер цена
---------ИД2 летняя красная размер цена
---------ИД3 зимняя розовая размер цена
...
Рейтинг: 0 / 0
Организация атрибутов для товара
    #36238215
Фотография INOKENTiY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во многих движках магазинов разделяют
# Характеристики товаров
# Параметры товаров
не могу понять зачем
и каким путем мне лучше реализовать для товара Радиус,Ширина, Высота, Типа, Сезонности и тд.
с учетом того что должна получится форма поиска, такая как тут http://2motor.ru/
чего-то совсем запутался? не хочется лепить просто первое, что на ум пришло
...
Рейтинг: 0 / 0
Организация атрибутов для товара
    #36238223
Фотография INOKENTiY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть каждый параметр должен быть подчиненным выходит, тогда такая форма поиска никогда не приведет к пустому результату
...
Рейтинг: 0 / 0
Организация атрибутов для товара
    #36238263
Simpliest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
INOKENTiYво многих движках магазинов разделяют
# Характеристики товаров
# Параметры товаров
не могу понять зачем


Понятия не имею, магазины не писал.

Единственный смысл, например, в том, что

характристики товаров являются обязательными и влияют на цену.

параметры - это нечто описательное, т.е. могут использоваться для облегчения поиска, а могут и вообще отсутствовать.
...
Рейтинг: 0 / 0
Организация атрибутов для товара
    #36238264
Фотография INOKENTiY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто применять для параметров Adjacency List или Nested Set мне кажется диким, и с другой стороны не вижу другого пути, что бы сделать такую форму поиска
...
Рейтинг: 0 / 0
Организация атрибутов для товара
    #36238272
Simpliest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
INOKENTiYто есть каждый параметр должен быть подчиненным выходит, тогда такая форма поиска никогда не приведет к пустому результату
Одно с другим не связано.

Можно доступные для выбора (в форме поиска) параметры фильтровать на основании уже выбранных.

Т.е. пользователь заведомо не сможет выбрать прочие параметры, которые не попали под 1й примененный фильтр.

Например

Цвет волос

Пол

Если мы выбрали "фиолетовые" волосы и среди найденных записей нет "мужчин", то в поиске в поле Пол у нас будет только 1 ваиант "Женщина" и выбрать "мужчина" мы не сможем.
...
Рейтинг: 0 / 0
Организация атрибутов для товара
    #36238665
Фотография INOKENTiY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Simpliest
Одно с другим не связано.

Можно доступные для выбора (в форме поиска) параметры фильтровать на основании уже выбранных.

Т.е. пользователь заведомо не сможет выбрать прочие параметры, которые не попали под 1й примененный фильтр.

Например

Цвет волос

Пол

Если мы выбрали "фиолетовые" волосы и среди найденных записей нет "мужчин", то в поиске в поле Пол у нас будет только 1 ваиант "Женщина" и выбрать "мужчина" мы не сможем.

да это понял, чего то не подумал, аяксом потом подтягивать можно.

хотел бы услышать еще мнение по поводу групп атрибутов, делать так как посоветовал Simpliest, так в принципе проще
...
Рейтинг: 0 / 0
Организация атрибутов для товара
    #36240155
Фотография INOKENTiY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Simpliest
Одно с другим не связано.

Можно доступные для выбора (в форме поиска) параметры фильтровать на основании уже выбранных.

Т.е. пользователь заведомо не сможет выбрать прочие параметры, которые не попали под 1й примененный фильтр.

Например

Цвет волос

Пол

Если мы выбрали "фиолетовые" волосы и среди найденных записей нет "мужчин", то в поиске в поле Пол у нас будет только 1 ваиант "Женщина" и выбрать "мужчина" мы не сможем.

подумал еще раз, это прийдется сделать лишние запросы на каждый вариант, выбрали фиолетовые, что бы сформировать следующий список нужно проверить для каждого товара с цветом "фиолетовый" или исполняется условие пол "мужчина" и условие пол "женщина" если не выполняется не добавлять в список для выбора. Это нормально?
...
Рейтинг: 0 / 0
Организация атрибутов для товара
    #36240203
Simpliest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
INOKENTiY,

Зависит от посещаемости и насколько удобным ты хочешь это сделать для пользователя.

Вариантов несколько

1. не делать много запросов, но выводить пользователю сообщение "под ваши условия поиска нет товаров" .
2. делать много запросов. При маленькой нагрузке/посещаемости это не критично (впрочем если криво напишешь запросы то можешь положить и при маленькой :) ).
3. делать много запросов и кешировать их результаты в memcache, файлах или еще где-то (при большой нагрузке кешировать все равно придется.)

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


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