База для каталога товаров

Name

Новичок
База для каталога товаров

Как бы базу пограмотнее спроектировать.

Ничего особенного.
Есть
Группа товаров
Мониторы
Принтеры
Подгруппа товаров
15 ,17, 19
Матричные, струйные

Делаю три таблицы
Группа товаров
id, name_ru
Подгруппа товаров
id, group_id, podgroup_id, name_ru
Прайс
id,group_id,podgroup_id,tovar, price

Что то неправильно скорее всего.
(неакуратьненько как то)
Как бы поуниверсальнее (если будет много вложеностей)


Западные источники прелагают, вообще мне не очень понятно
Группы и подгрупы хранить в одной таблице
id | category
0 | Монитор (Категории)
0 | Принтеры
1 | 15 (подкатегории)
 

tony2001

TeaM PHPClub
http://phpclub.net/talk/search.php?s=&action=showresults&searchid=42485&sortby=lastpost&sortorder=descending
выбери все постинги про деревья в SQL.
 

Demiurg

Guest
если нужен произволный уровень вложенности, то делаешь таблицу Группы товаров:
id - первичный ключ
perent_id - внешний ключ на родителя (null, если это корневая группа)
ну и name
 

Name

Новичок
если нужен произволный уровень вложенности, то делаешь таблицу Группы товаров:
Почитал кое что. Вроде въехал.
Однако буквально вчера искал инфу по этой теме
наткнудся на топик где человек тоже хотел сделать категории, подкатегории в одной таблице
однако ему сказали, мягко выражаясь (ты не прав), мол категории надо хранить в отдельной таблице и все тут.

И насколько такой вариант хранения данных подходит для каталога товаров
в смысле может гиморно это поддерживать в будущем (delete, update) или еще что.
 

Frenk

Guest
Огород городишь... Зачем, нафиг, три таблицы? Одной - достаточно. Я реализовал все в одной таблице:
id
kat
kat_1
...
kat_n
name
Все! Далее просто грамотно делаются запросы к базе, тобишь WHILE kat=xxx, kat1=xxx и т.д. По моему это хороший вариант. Ведь если куча подгрупп - то, по твоему, следует создавать такую же кучу баз?
 

su1d

Старожил PHPClubа
Мда.. Frenk, огород городишь ты. Тебе ещё многому учиться надо...

2Name: глянь http://dev.e-taller.net/dbtree/
на самом деле, держать категории в отдельной таблице - это очень хорошо (и, что главное, быстро).
 

Name

Новичок
Вот у буржуев накопал такую структуру.

Category
| id | parent_id | name |

[/b]Products[/b]
| id | name | description | price

[/b]Products_categories[/b]
| product_id | category_id |

Что скажете.
Только не понятно зачем третья таблица получается отношение many to many.
Можно наверное category_id засунуть в таблицу Products.
 

Frenk

Guest
Ну, учится - всегда полезно!
Однако думается, что в зависимости от требования к дереву(к задаче), надо выбирать наиболее подходящее решение. Думаю, что использование приведенных su1d классов ненужно, хотя все это, конечно, круто.
2Name: Когда остановишь свой выбор на какой-либо структуре - отпиши, pls, интересно.
 

Rynor

stay hungry
для 2х-уровневых каталогов вот так можно

c_topics:
id
topics_id (0 for topics)
title
....

c_products:
id
topic_id (=c_topics.id)
title
...

c_prices:
id
product_id (=c_products.id)
store_id
value
....

не универсально но таблицы подразделов не надо :)
 

mahoune

Guest
Автор оригинала: Name
Вот у буржуев накопал такую структуру.

Category:
| id | parent_id | name |

Products:
| id | name | description | price |

Products_categories
| product_id | category_id |

Что скажете.
Только не понятно зачем третья таблица получается отношение many to many.
Можно наверное category_id засунуть в таблицу Products.
Самое что ни на есть грамотное решение! И нечего шишку парить!
 

Demiurg

Guest
mahoune в чем его грамотность ? где ты собираешься хранить подгруппы ?
 

mahoune

Guest
А таблица Category зачем?
Та и хранишь дерево категорий товаров?! Или я опять не на том поезде?

Ну и соответственно в Products_categories задаешь связи Товаров к категориям! Хотя это для случая если один товар может относится к нескольким категориям! Иначе можно просто category_id поместить в таблицу products
 

Demiurg

Guest
>А таблица Category зачем?
ладно, где тогда группы ?
 

Chese

Guest
Demiurg ты не выспался :) ?
Таблица Category содержит в себе категории и подкатегории.

| id | parent_id | name |
| 1 | 0 | Mouse |
| 2 | 1 | Genius |
| 3 | 1 | Microsoft |

что не понятно?
 

Name

Новичок
В итоге я сделал так:

Category
| id | parent_id | name |

Products
| id | cat_id | cat_parent_id | firm_id | name | description | price |

Добавил cat_parent_id что бы выводить подгрупы
Хватает для трех уровневого каталога, с увеличение подгруп надо добавлять
в product поля cat_parent_id. Во всяком случае у меня так получилось.
 

Макс

Старожил PHPClub
Name
вот http://dev.e-taller.net/dbtree/ разберись с этим, и в будущем не будет проблем с деревьями, любого уровня вложенности.
Там любую ветвь дерева за один запрос вытащить можно.
 
Сверху