オブジェクトのタグ付けにMySQLデータベースを使用するPHP Webアプリケーションがあります。このSOの質問への回答として受け入れられたタグ構造を使用しました。
各タグが一意の親タグを持つことができるタグ階層を実装したいと思います。親タグ T の検索は、T のすべての子孫 (つまり、T、親が T であるタグ (T の子)、T の孫など) に一致します。
これを行う最も簡単な方法は、タグの親タグの ID を含む ParentID フィールドをタグ テーブルに追加するか、タグに親がない場合は何らかのマジック ナンバーを追加することです。ただし、子孫を検索するには、データベースを完全に検索して各「世代」のタグを見つける必要がありますが、これは避けたいと思います。
(おそらく) より高速ですが、正規化されていない方法は、各タグのすべての子、または各タグのすべての子孫を含むテーブルを作成することです。ただし、これにより、データベース内のデータに一貫性がなくなる危険性があります (たとえば、タグが複数の親の子であるなど)。
データを可能な限り正規化しながら、クエリを作成して子孫をすばやく見つける良い方法はありますか?