サブカテゴリ(子カテゴリ)テーブルって必要?

データベースでカテゴリ管理する場合、カテゴリ(親カテゴリ)とサブカテゴリ(子カテゴリ)で別テーブルの設計にしているシステムってありますよね。


カテゴリ(親カテゴリ)とサブカテゴリ(子カテゴリ)だけの場合はそれでいいかもしれませんが、3階層、4階層・・・と管理したい場合、階層ごとにテーブルを増やしていくのはスマートではないですよね。


そこで、カテゴリテーブル、1テーブルだけで複数階層のカテゴリ管理がスマートにできるカテゴリテーブルの設計を書いてみます。


■カテゴリテーブル

項目 フィールド名
カテゴリID category_id int(11)
親カテゴリID parent_id int(11)
カテゴリ名 category_name varchar(64)
状態 state int(11)


■階層構造例

1階層 2階層 3階層 4階層
本(1,0)
コンピュータ(2,1)
プログラミング(3,2)
C++(4,3)
PHP(5,3)

※カッコ内左の数字は「カテゴリID」、右の数字は「親カテゴリID」です。


親カテゴリ「本」はカテゴリID「1」になります。その下のカテゴリ「コンピュータ」はカテゴリID「2」親カテゴリ「1」になります。その下のカテゴリ「プログラミング」はカテゴリID「3」親カテゴリ「2」になるといった感じです。


子カテゴリが、親カテゴリの情報を持つことによって、階層構造を表します。