Я предполагаю, что вы имеете дело с иерархическими данными здесь.
Вам просто нужно две таблицы. Одна из таблиц предназначена для категорий и отношений между категориями. Например:
CategoryID CategoryName ParentCategoryID
----------------------------------------
1 Computers NULL
2 Programming 1
3 Games 1
4 Python 2
Другая таблица предназначена для хранения данных, связанных с категориями. Например:
CategoryID ItemID Description
----------------------------------------------
4 1 Book – Programming in Python
3 1 World of Warcraft
Первая таблица содержит столбец внешнего ключа, который связывает подкатегории с их родительскими категориями. Это известно как «Модель списка смежности». Преимущество этой модели заключается в простоте понимания и выполнении различных действий (например, поиск пути к категории Python - / Computers / Programming / Python), при этом эта модель может быть довольно легко реализована с помощью кода на стороне клиента (если вы этого не сделаете помните о производительности, потому что вам может потребоваться сделать несколько запросов к базе данных). Тем не менее, это может быть ошеломляющим, если вы попытаетесь сделать это в полном SQL. Например, для получения пути к категории потребуются самостоятельные объединения.
Другой способ структурирования этой таблицы - думать о категориях и подкатегориях как о наборах и подмножествах (известных как «Модель вложенных наборов»). Трудно объяснить эту модель без диаграмм, и статья Управление иерархическими данными в MySQL , кажется, лучше справляется с объяснением концепций (модели «Список смежности» и «Вложенный набор»).