隣接リスト
SQLで木構造を持たせる最も単純で一般的な方法。各行が親を指すparent_idを持つ。理解も更新も簡単だが、部分木をまるごと取るには再帰クエリが要る。
仕組みは自己参照テーブルで、parent_idが同じテーブルの主キーを指す外部キーになり、ルートはNULLとする。利点は、ノードの追加や移動がparent_idの書き換えだけで済み、正規化された自然な形であること。代償は、子孫や祖先をすべて取るのに、階層ごとの複数クエリか再帰CTE(WITH RECURSIVE)が必要で、深い木では遅くなりうることだ。最初に選ぶ古典的なモデルであり、部分木の読み取りが詰まりになったら、マテリアライズドパス、入れ子集合、クロージャテーブルへ移ることになる。多くのORMが直接サポートしている。カテゴリ、コメントのスレッド、組織図といった中程度の階層なら、まずこれでよい。