Ваш подход на почти месте.Основной недостаток вашего решения заключается в том, что если данный продукт может принадлежать более чем к одной категории, то ваша схема будет дублировать все метаданные этого продукта для каждого отношения продукта-категории.Стандартный способ справиться с этим - создать третью соединительную таблицу, которая в основном существует для хранения отношений между продуктами и их категориями.Таким образом, ваша таблица соединений может выглядеть примерно так:
CREATE TABLE Product_Category (
product_id integer,
category_id integer,
PRIMARY KEY (product_id, category_id)
)
Из вашей текущей таблицы Product
вы бы удалили ссылку на category_id
.
В качестве примера запроса, еслиВы хотели бы узнать все названия категорий данного продукта, вы можете попробовать:
SELECT
c.category_name
FROM Category c
INNER JOIN Product_Category pc
ON c.id = pc.category_id
INNER JOIN Product p
ON pc.product_id = p.product_id
WHERE
p.product_name = 'some product name';