Правильное построения категорий для товаров

Pavel6

Новичок
Правильное построения категорий для товаров

Как по вашему мнению нужно хранить категории для товаров.
К примеру есть таблица товаров и есть таблица категорий, при добавлении записи в таблицу товаров необходимо указать к каким категориям она относится, если бы она относилась к одной категории мы моглибы сохранить ID категории рядом с записью при добавлении товара в поле catID, но у нас ведь товар одновременно может находится в нескольких категориях. Вопрос таков может создать еще одну таблицу которая будет хранить Id-товаров и IdCat - категорий, таким образом товар с ID=5 может находится у нас в двух и более категориях - ID=5 - IdCat=2, ID=5 - IdCat=3 и т.д..
Либо некоторые предлагают в таблицы товаров создать поле VarChar и в нем через | хранить IdCat-номера категорий, а потом при поиски по категориям пользоваться LIKE.
Какой по вашему правильный вариант?
 

Beavis

Banned
связь "многие-ко-многим" организуется через дополнительную таблицу
а второй вариант он вообще теории реляционных БД противоречит, да и на практике скорее всего будет медленней работать
 

Апокалипсис

тех дир matras.ru
поищи поиском, вроди zerkms (если я не ошибаюсь) предлагал структуру каталога товаров.
 

MaxiStyle

Новичок
Pavel6
Сперва изучите многие-ко-многим, затем JOIN и уже потом как это сделано у других.

пример:
категории
catID | catName
-------+--------------
1 | категория1
2 | категория2

товар
prodID | prodName
---------+--------------
1 | товар1
2 | товар2

связь prod2cat

prodID | catID
---------+-------
1 | 2
1 | 1
2 | 2

Таким образом товар 1 находится в 1 и 2 категории, а товар 2 только во второй.

SELECT * FROM cat, prod, cat2prod WHERE cat.catID=cat2prod.catID AND prod.prodID=cat2prod.prodID
 

zerkms

TDD infected
Команда форума
Апокалипсис
не, у нас было большое обсуждение структуры для хранения "разнотипных" объектов, т.е. сам "каталог"
 

Pavel6

Новичок
Автор оригинала: MaxiStyle
Pavel6
Сперва изучите многие-ко-многим, затем JOIN и уже потом как это сделано у других.

пример:
категории
catID | catName
-------+--------------
1 | категория1
2 | категория2

товар
prodID | prodName
---------+--------------
1 | товар1
2 | товар2

связь prod2cat

prodID | catID
---------+-------
1 | 2
1 | 1
2 | 2

Таким образом товар 1 находится в 1 и 2 категории, а товар 2 только во второй.

SELECT * FROM cat, prod, cat2prod WHERE cat.catID=cat2prod.catID AND prod.prodID=cat2prod.prodID
А если у нас добавляется таблица городов, и каждый товар может находится в нескольких городах, тогда создаем таблицу типа prod2cat, назовем ее prod2city
связь prod2city

prodID | cityID
---------+-------
1 | 9
2 | 4
2 | 6

Но тепер нам необходимо реализовать запрос который найдет продукты по категории catID=2 и по городу cityID=6
Как реализовать такой запрос?
 
Сверху