Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Правильное хранение свойств товара / 6 сообщений из 6, страница 1 из 1
04.03.2005, 13:08
    #32946122
SSSerj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильное хранение свойств товара
На самом деле, данная тема рассматривалась уже несколько раз (см. ссылки в конце сообщения) и ничего кроме "голых слов " я не увидел :). Поэтому, решел провести тестирование. Идея тестирования: найти оптимальный способ хранения свойств товаров, имеющих различные физические характеристики (типы свойст). Критерием для оценки оптимальности является скорость поиска товаров, удовлетворяющих условию поиска (условие поиска - совокупность различных признаков товара).
В качестве БД для тестирования была выбрана MySql4 (на данный момент, для меня это самое удобное средство, в рамках проекта)

Собственно, вопросы:
1. Что Вы думаете об этом?
2. Какую БД Вы используете для хранения? И почему? (Пожалуйста, обоснуйте ответ)
3. Как Вы храните описания (совокупность признаков) товаров в выбранной БД? (В частности, очень интересны ответы в отношении PostgreSQL)
4. Какие "фишки" в выбранной БД Вы используете? (Если будете писать временные таблицы, триггеры, курсоры и т.п., то прошу рассмотреть в каких целях они используются)

Заранее благодарю за ответы!

---------------------------- Тестирование -------------------------
Исходные данные тестирования:
10000 товаров по 5 характеристик для каждого товара.

Вариант1 - см. Вариант1
Все типы свойств товара храняться в одном текстовом поле (см. схему таблицы по ссылке) таблицы info_goods.

Вариант2 - см. Вариант2
Все типы свойств товара храняться в разных полях, соответствующих типов (см. схему таблицы по ссылке) таблицы info_goods. (предложение chira "PHPClub")

Условие поиска: Найти все товары, количество деталей которых более 300 шт, Дата поступления не ранее 1997-12-01 и весом более 400.00 кг.

Запрос для Варианта №1 :
Код: plaintext
SELECT DISTINCT\nA2.`property_value` as Pr2, A1.`property_value` as Pr1, A3.`property_value` as Pr3\nFROM goods\nINNER JOIN `info_goods` A2 ON A2.id_goods = goods.id_goods\nand A2.property_list_id_property_list= 5  \nand A2.`property_value`> 300 \nINNER JOIN `info_goods` A1 ON A1.id_goods = goods.id_goods\nand A1.property_list_id_property_list= 3 \nand A1.`property_value`>\'1997-12-01\'\nINNER JOIN `info_goods` A3 ON A3.id_goods = goods.id_goods\nand A3.property_list_id_property_list= 4  \nand A3.`property_value`> 400 . 00 \nWHERE A1.id_goods = A2.id_goods and A1.id_goods = A3.id_goods\nORDER BY A1.`property_value`;

Запрос для Варианта №2:
Код: plaintext
SELECT DISTINCT\nA2.`value_int` as Pr2, A1.`value_dat` as Pr1, A3.`value_dec` as Pr3\nFROM goods\nINNER JOIN `info_goods` A2 ON A2.id_goods = goods.id_goods\nand A2.property_list_id_property_list= 5 \nand A2.`value_int`> 300 \nINNER JOIN `info_goods` A1 ON A1.id_goods = goods.id_goods\nand A1.property_list_id_property_list= 3 \nand A1.`value_dat`>\'1997-12-01\'\nINNER JOIN `info_goods` A3 ON A3.id_goods = goods.id_goods\nand A3.property_list_id_property_list= 4 \nand A3.`value_dec`> 400 . 00 \nWHERE A1.id_goods = A2.id_goods and A1.id_goods = A3.id_goods\nORDER BY Pr1;

Explain для Варианта№1:
Результат

Explain для Варианта№2:
Результат

Принятые имена файлов:
1. ddl.sql - команды SQL для создания соответствующих таблиц
2. data.sql - информационные данные таблиц
3. search.sql - запросы поиска информации

4. explain-before-optimiz.jpg - explain результата запроса search.sql для данных, которые были внесены после создания таблицы info_goods (как-будто 10000 "операторов БД" последовательно вносили информацию, а затем также последовательно попорядку ее сохранили)

5. explain-before-optimiz.jpg - explain результата запроса search.sql после оптимизации п.4

6. explain-after-drop-dump.jpg - explain результата запроса search.sql после полного удаления БД, дампирования данных п. 2 (Эквивалентно тому, что "администратор БД" заново восстановил таблицу)

7. explain-after-drop-dump-optimiz.jpg - explain результата запроса search.sql после оптимизации п.6

Резюме: Вариант 2 - лучший из рассмотренных.

---------------------------- Тестирование -------------------------


Ссылки по теме:
1. Организация структуры БД
2. Разные типы данных в одном поле / MySQL
3. Связывание таблиц
4. Увеличение скорости выборки из каталога товаров / MySQL
5. Универсальный каталог "разношерстных" товаров.
...
Рейтинг: 0 / 0
05.03.2005, 11:23
    #32947917
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильное хранение свойств товара
Однозначно вариант 2.
Хранить надо данные в соответствующих полях. Тогда и найти их можно быстро (по индексу), и преобразований делать не надо. Некоторая избыточность никак не пугает т.к. она незначительна. Даже для 100тыс. товара свойств вряд-ли будет более 500тыс. Это крохи.
...
Рейтинг: 0 / 0
05.03.2005, 12:35
    #32948108
Alexey Sh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильное хранение свойств товара
LSVОднозначно вариант 2.
Хранить надо данные в соответствующих полях. ...

при одном условии - набор атрибутов(характкристик) фиксирован
...
Рейтинг: 0 / 0
05.03.2005, 13:11
    #32948233
SSSerj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильное хранение свойств товара
Alexey Sh при одном условии - набор атрибутов (характкристик) фиксирован

Вероятней всего - набор типов свойств. В приведенном примере их 4: integer, float, string, date. Каждому типу может соответствовать множество "названий" характеристик (к примеру, типу Дата - дата поступления товара, дата отгрузки и т.п.).

Я думую, Вы думали так!
...
Рейтинг: 0 / 0
09.03.2005, 10:35
    #32950638
SSSerj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильное хранение свойств товара
Слегка подкорректировал вопросы:
SSSerj
...
2. Какую БД Вы используете для хранения данных интернет-магазина? И почему? (Пожалуйста, обоснуйте ответ)

3. Как Вы храните описания (совокупность признаков) товаров в выбранной БД? (В частности, очень интересны ответы в отношении PostgreSQL)

4. Какие "фишки" в выбранной БД Вы используете? (Если будете писать временные таблицы, триггеры, курсоры и т.п., то прошу рассмотреть в каких целях они используются)
...
Рейтинг: 0 / 0
09.03.2005, 11:11
    #32950759
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильное хранение свойств товара
при одном условии - набор атрибутов(характкристик) фиксирован
Ну да.
В таблице есть тип целое, плавающее, дата, логич., строка и ссылка(на внешний справочник)
Допустимо одновременное использование сразу нескольких параметров.
В типе данных указано какие именно поля активны.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Правильное хранение свойств товара / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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