【1】この場合、配列型を用いれば、以下のように単一のテーブルでスマートに記述できますよね。 < node テーブル> [ id ] [ parent ] [ child ] [その他]・・・ A {} {B,C} B {A} {C} C {A,B} {} しかも、「SELECT * FORM node WHERE 'A' = ANY( parent )」とするだけでAの子ノードを、「SELECT * FORM node WHERE 'C' = ANY( child )」とするだけでCの親ノードを、一発で抽出することが出来ます。
【2】しかしここで配列が使えないとすると、親子関係を定義するテーブルが別途必要になりますよね。 < info テーブル> [ id ] [その他]・・・ A B C < link テーブル> [ parent ] [ child ] A B A C B C しかも、Aの子ノードを検索するのに、「SELECT * FROM info WHERE id IN ( SELECT child FROM link WHERE parent = 'A' )」といったサブクエリを使う必要も出てきます。