一つの親を持ち、一つ以上の子を持つような階層型データはよくあると思います。 しかし、あまり深く考えずに設計してしまうと、あとあとうまくSQLが書けなくて困ったりします ( 自分は困りました )。 「SQLアンチパターン」の第2章にこのような階層型データの格納について詳しく載っていたので、簡単にまとめてみました。 「SQLアンチパターン」にはそれぞれの長所と短所についてより詳しく解説してありますので、もっと知りたい方は読んでみることをお勧めします。 案その1: 隣接リスト parent_id などの名前で、同じテーブル内の別の行を参照する方法です。 私自身も目にしたことがある、よくある方法だと思います。 実際の業務で行うかは別にして、下記のように外部キー制約をつけることもできます。 CREATE TABLE Users ( id SERIAL PRIMARY KRY, parent_id B