Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Помогите с проектированием базы данных
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
Всем привет!Есть такое задание:
Товары на сайт интернет-магазина сгруппированы по категориям. Категории организованы в древовидную структуру с уровнем вложенности до 4 включительно. Значимые атрибуты категории: название. Значимые атрибуты товара: название и цена. Один продукт может относиться к нескольким категориям.
1. Разработать структуру базы данных MySQL для хранения дерева категорий, списка продуктов и информации о принадлежности продуктов к категориям.
2. Заполнить таблицы тестовыми данными.
3. Написать SQL-запросы для получения следующих данных:
a. Для заданного списка товаров получить названия всех категорий, в которых представлены товары;
b. Для заданной категории получить список предложений всех товаров из этой категории и ее дочерних категорий;
c. Для заданного списка категорий получить количество предложений товаров в каждой категории;
d. Для заданного списка категорий получить общее количество уникальных предложений товара;
e. Для заданной категории получить ее полный путь в дереве (breadcrumb, «хлебные крошки»).
4. Проверить и обосновать оптимальность запросов.
Подскажите чем кто может!Может мануал есть хороший по проектированию бд интернет магазинов.Или У кого-то опыт хороший имеется в этом деле!
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
jonston пишет:
Может мануал есть хороший по проектированию бд
Вот именно так и ищите. Проектирование БД - всегда проектирование БД и принципы там одни и те же.
Для представленной задачи: таблица категорий (включая простое дерево с рекурсивным обходом), таблица товаров, таблица связи товар-категория.
jonston пишет:
4. Проверить и обосновать оптимальность запросов.
заслуживает отдельного рассмотрения:
оптимальность затраченных усилий к скорости обработки результата или максимально оптимальный запрос. Во втором случае - курите что-нибудь типа NESTED SETS.
----- PostgreSQL DBA
jonston
Отправлено: 07 Мая, 2011 - 14:30:08
Посетитель
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
Мелкий пишет:
jonston пишет:
Может мануал есть хороший по проектированию бд
Вот именно так и ищите. Проектирование БД - всегда проектирование БД и принципы там одни и те же.
Для представленной задачи: таблица категорий (включая простое дерево с рекурсивным обходом), таблица товаров, таблица связи товар-категория.
jonston пишет:
4. Проверить и обосновать оптимальность запросов.
заслуживает отдельного рассмотрения:
оптимальность затраченных усилий к скорости обработки результата или максимально оптимальный запрос. Во втором случае - курите что-нибудь типа NESTED SETS.
спасибо!
----- $i = 0;
$i = $i++ + ++$i; ?
EuGen
Отправлено: 07 Мая, 2011 - 14:58:24
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Agile
Отправлено: 30 Августа, 2011 - 07:45:00
Новичок
Покинул форум
Сообщений всего: 1
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Самое правильное хранения деревьев в базе это такое:
Создадим таблицу в БД. Где два поля (не считая идентификатора) одно поле - категория, второе поле - родитель категории. На самом деле этого достаточно что бы хранить дерево с любыми уровнями вложенности.
Код рассчитан на пять уровней, чего на практике предостаточно, но ели нужно добавить еще уровней, это так же можно легко добавить. Вникать сейчас в создание уровней свыше пятого не будем, так как это вряд ли пригодиться.
На выходе получили многомерный массив который и является деревом. Для вывода массива в виде дерева для пользователя пользуйтесь рекурсией, рекурсию допишите сами, вот пример:
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.