Xpoint
   [напомнить пароль]

Структура каталога продукции

Метки: [без меток]
2010-09-23 13:02:17 [обр] Сергей Костин(0/21)[досье]
Здравствуйте.
Составляю структуру базы данных каталога продукции для CMS.
Структура у меня получилась такая:
Категория->Группа->Тип->Бренд->Серия(конечный продукт).
С первыми четырьмя мне все понятно. У них все поля общие.
С "конечным продуктом" возникли трудности.
Есть три категории продуктов, у каждой из трех категории поля конечных продуктов разные.
Вот возник такой вопрос, как лучше сделать?
Что я вижу:
  1. Создать три таблицы, со своими полями, для конечных продуктов для этих категории.
  2. Сделать одну общую таблицу и дать пользователю возможность самому добавлять поля.
спустя 1 час 58 минут [обр] Леонид Сысолетин(0/14)[досье]
М-м...
Создать таблицу продуктов (с минимумом полей), таблицу параметров продуктов, и связать их?
Одной записи из таблицы продуктов будет соответствовать несколько записей в таблице параметров.
спустя 3 часа 39 минут [обр] Евгений Седов aka KPbIC(0/187)[досье]
Сергей Костин[досье] Покажите структуру таблиц.
спустя 29 минут [обр] Сергей Костин(0/21)[досье]

Евгений Седов aka KPbIC[досье] Структура таблиц(расписываю, только основные поля).

  1. Категория
idname
intvarchar
  1. Группа
idid_categoryname
intintvarchar
  1. Тип
idid_groupname
intintvarchar
  1. Бренд
idid_typename
intintvarchar
  1. Серия(конечный продукт)
idid_brandname
intintvarchar

И если я правильно понял Леонид Сысолетин[досье]
То можно создать таблицу параметров, в моем случае, я могу такую таблицу для группы.

Параметры продукта для группы

idid_groupname
intintvarchar

И еще одну таблицу, которая будет содержать значения для конечных продукта.

idid_productid_parametrvar_charvar_float
intintintvarcharfloat
спустя 30 минут [обр] Евгений Седов aka KPbIC(0/187)[досье]
Сергей Костин[досье] А как вы будете сортировать группы внутри категории, например?
спустя 15 минут [обр] Сергей Костин(0/21)[досье]
Евгений Седов aka KPbIC[досье] Для сортировки добавлю поле sort с типом int в таблицу "Группа".
спустя 2 часа 10 минут [обр] Евгений Седов aka KPbIC(0/187)[досье]
Сергей Костин[досье] Оно будет уникальным в пределах одной Категории?
спустя 1 час 18 минут [обр] Филипп Ткачев(0/115)[досье]

А если поступить так:

  1. Создать таблицу для хранения структуры каталога, например на основе Nested Sets
  2. Таблица свойств id, name
  3. Таблица наборов свойств id,name
  4. Таблица значений свойств id, value
  5. Товар
  6. Пересечения между структурой и наборами свойств, товарами и структурой, товарами и значениями свойств. Можно подумать над прикрепляемыми свойствами к категории и к товару.

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

спустя 13 часов [обр] Сергей Костин(0/21)[досье]

Евгений Седов aka KPbIC[досье]

Оно будет уникальным в пределах одной Категории?

Да, оно будет уникальным в пределах одной категорий. Идентификатором служит поле id_category в таблице Группа.

спустя 34 минуты [обр] Евгений Седов aka KPbIC(0/187)[досье]

Сергей Костин[досье]

Тогда, поле сортировки и id_category составляют ключ таблицы, id избыточен.

Не хотите подумать над предложением Филиппа?

спустя 9 минут [обр] Владимир Михайленко(0/33)[досье]
Если я правильно понял, то предлается использовать: http://en.wikipedia.org/wiki/Entity-attribute-value_model
Когда я интересовался этим вопросом, то очень помогла статья: http://sankuru.biz/fr/blog/8-j......n-kit-and-the-eav-problem.html
Если коротко:
- EAV лучше не использовать (сложно в реализации + не держит нагрузку)
- Если набор свойств отличается не сильно, то лучше иметь десяток NULL-полей
- Если поля отличаются полностью, то можно подумать о сериализации данных в BLOB ( http://www.mysqlperformanceblo......lized-objects-in-the-database/ )
Powered by POEM™ Engine Copyright © 2002-2005