サブカテゴリ(子カテゴリ)テーブルって必要?
データベースでカテゴリ管理する場合、カテゴリ(親カテゴリ)とサブカテゴリ(子カテゴリ)で別テーブルの設計にしているシステムってありますよね。
カテゴリ(親カテゴリ)とサブカテゴリ(子カテゴリ)だけの場合はそれでいいかもしれませんが、3階層、4階層・・・と管理したい場合、階層ごとにテーブルを増やしていくのはスマートではないですよね。
そこで、カテゴリテーブル、1テーブルだけで複数階層のカテゴリ管理がスマートにできるカテゴリテーブルの設計を書いてみます。
■カテゴリテーブル
| 項目 | フィールド名 | 型 |
|---|---|---|
| カテゴリID | category_id | int(11) |
| 親カテゴリID | parent_id | int(11) |
| カテゴリ名 | category_name | varchar(64) |
| 状態 | state | int(2) |
■階層構造例
| 1階層 | 2階層 | 3階層 | 4階層 |
|---|---|---|---|
| 本(1,0) | |||
| コンピュータ(2,1) | |||
| プログラミング(3,2) | |||
| C++(4,3) | |||
| PHP(5,3) |
親カテゴリ「本」はカテゴリID「1」になります。その下のカテゴリ「コンピュータ」はカテゴリID「2」親カテゴリ「1」になります。その下のカテゴリ「プログラミング」はカテゴリID「3」親カテゴリ「2」になるといった感じです。
子カテゴリが、親カテゴリの情報を持つことによって、階層構造を表します。