- ベストアンサー
親子に分けた方が良い? テーブルの正規化?
■知りたいこと ブログカテゴリー(親・子) を取り扱う際、普通は「1テーブル」でいくのでしょうか、それとも、親と子の2テーブルを作成するのでしょうか? ・それぞれのメリットデメリットは? ・「ケースバイケースによるので一概には言えない?」or「どちらでも同じ?」 ・また、「2テーブル(親子)」に分けることを正規化というのでしょうか? ■現状 ・1テーブルで運用(parent_idカラム利用) ・子カテゴリー数が多くなると、phpMyAdmin等で目視する際、カテゴリーテーブルから親カテゴリーIDを探しづらくなる(条件で抽出するので、大きな問題ではないですが)
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
親子カテゴリーというか、その手のものは、さらに孫カテゴリーが出来て、ツリー型になるので、親子でtableを分離すると逆に面倒なことになる。 しかし、ツリー型をデータベースでうまく処理するには、こつが要る。 3種類の方法があって、最終的にどんなデータの取り出し方をすることがおおいか、どのデータベースシステムを使うのか(サブクエリの使い勝手や、Oracleのように階層関係を簡単に処理できる関数を持ってるか)によって決めるとよいだろう。 http://makizou.com/1616/ に概略解説がある。 1.隣接リスト型 : parent_id を持たせる方法 2.経路列挙型: ディレクトリーツリーのような表示形式で保持する方法 http://www.makizou.com/archives/1662 3.入れ子集合型: 右値と左値を持たせて、子集合は、親の左右値内に入る様にする http://www.geocities.jp/mickindex/database/db_tree_ns.html まあ、単純一覧でぱっと見理解しやすいのは、2の列挙型かと思うけど、列挙形式記述にこつが要る。親側に変更があるときに面倒、プログラムで行えばどうということもないけど。 3は、ぱっと見分け解りません。データ作成も手作業では間違うから、プログラムをうまく組む必要があります。でも、最終的に結構すっきりした構造になるという利点があります。 1は、データ作成は簡単だけど、取り出すときに、階層処理関数を持ってないmysqlでは一回で階層化できないことが多い。2階層しかないなら、あんまり問題にならないかもしれないけど。 「テーブルの正規化」は、ちょっと意味が違うので、ちゃんとそれを解説しているページを探して読んでください。
お礼
回答ありがとうございます。 >親子でtableを分離すると逆に面倒 はっきり言っていただけると、助かります。 また、「ツリー型」に該当することや、3種類の特徴について詳しく説明いただいだので、 大変参考になりましたー