Одна таблица для продуктов и другая таблица для иерархии категорий продуктов (вы конкретно не говорите, что у вас это есть, но «древовидная навигация по таблицам» заставляет меня думать, что вы можете).
IЯ могу видеть, что вы можете быть обеспокоены чрезмерной индексацией, вызывающей проблемы, если вы планируете индексировать почти каждый столбец.В этом случае может быть лучше индексировать по верхним 5 или 10 столбцам, которые, по вашему мнению, пользователи будут искать, если только пользователь не может выполнить поиск по ЛЮБОМУ столбцу.В этом случае вы можете посмотреть на создание хранилища данных.Может быть, вы захотите взглянуть на кубы данных, чтобы увидеть, помогут ли они ...?
Для иерархических данных вам нужна таблица PRODUCT_CATEGORY
, которая выглядит примерно так:
ID
PARENT_ID
NAME
Некоторые примеры данных:
ID PARENT_ID NAME
1 ROOT
2 1 SOCKS
3 1 HELICOPTER PARTS
4 2 ARGYLE
Некоторые механизмы SQL (например, Oracle) позволяют писать рекурсивные запросы для обхода иерархии в одном запросе.В этом примере корень дерева имеет PARENT_ID
из NULL
, но если вы не хотите, чтобы этот столбец обнулялся, я также видел, что -1
использовался для тех же целей.