Проектирование баз данных древовидной системы категории

Я использую Модель Списка Смежности для создания категорий, и она работает отлично.

При получении статей в определенной категории (например, электроника), я хотел бы также получить статьи в sub категориях (например, электроника-> камеры или даже электроника-> камеры-> объективы фотокамеры).

Путем я делаю его, теперь вытягивает от DB весь идентификатор категории sub категорий электроники и находит все статьи с category_id в этом списке.

Это кажется мне очень неэффективным и трудоемким, так как это могло привести ко многим запросам для получения этих sub категорий.

Иначе я думал о выполнении, этому связывали каждую статью с целым деревом категории (например, статья об объективах фотокамеры будет также связана с камерой и категориями электроники в таблице MANY_MANY), и когда я получу все статьи в электронике, это также появится.

Это добавило бы много избыточных данных к базе данных, хотя, поскольку мне, возможно, придется сохранить 3 или 4 категории для каждой статьи. Кроме того, это усложнило бы действия как перемещение статьи к другой категории.

Действительно ли это - правильный способ пойти? Или есть ли лучший/более простой способ, которым я не думал?

Любая справка ценится!

5
задан EdanB 4 January 2010 в 07:45
поделиться

1 ответ

Читайте эту статью о моделировании вложенных множеств: Управление иерархическими данными в MySQL.

Используя предложенную методику, можно получить целые деревья или поддеревья в одном SELECT. Это немного сложнее, чем "нормальный" подход, но это того стоит, если вы собираетесь делать много чтений из таблицы.

.
12
ответ дан 13 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: