У меня есть веб-приложение PHP, которое использует базу данных MySQL для тегирования объектов, в котором я использовал структуру тегов, принятую в качестве ответа на этот вопрос SO.
Я хотел бы реализовать иерархию тегов, где каждый тег может иметь уникальный родительский тег. Тогда поиск родительского тега T будет соответствовать всем потомкам T (т. Е. Тегам T, родительским тегом T (дочерние элементы T), внуки T и т. Д.).
Самый простой способ сделать это, по-видимому, - добавить поле ParentID в таблицу тегов, которое содержит идентификатор родительского тега тега или какое-то магическое число, если у тега нет родительского элемента. Однако поиск потомков требует повторных полных поисков в базе данных для поиска тегов в каждом «поколении», чего я бы хотел избежать.
(Предположительно) более быстрый, но менее нормализованный способ сделать это - иметь таблицу, содержащую всех дочерних элементов каждого тега или даже всех потомков каждого тега. Однако это создает риск несогласованности данных в базе данных (например, тег является дочерним элементом более чем одного родителя).
Есть ли хороший способ быстро выполнять запросы для поиска потомков, сохраняя при этом данные как можно более нормализованными?