重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

■知りたいこと
ブログカテゴリー(親・子) を取り扱う際、普通は「1テーブル」でいくのでしょうか、それとも、親と子の2テーブルを作成するのでしょうか?
・それぞれのメリットデメリットは?
・「ケースバイケースによるので一概には言えない?」or「どちらでも同じ?」
・また、「2テーブル(親子)」に分けることを正規化というのでしょうか?

■現状
・1テーブルで運用(parent_idカラム利用)
・子カテゴリー数が多くなると、phpMyAdmin等で目視する際、カテゴリーテーブルから親カテゴリーIDを探しづらくなる(条件で抽出するので、大きな問題ではないですが)

A 回答 (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_tr …

まあ、単純一覧でぱっと見理解しやすいのは、2の列挙型かと思うけど、列挙形式記述にこつが要る。親側に変更があるときに面倒、プログラムで行えばどうということもないけど。
3は、ぱっと見分け解りません。データ作成も手作業では間違うから、プログラムをうまく組む必要があります。でも、最終的に結構すっきりした構造になるという利点があります。
1は、データ作成は簡単だけど、取り出すときに、階層処理関数を持ってないmysqlでは一回で階層化できないことが多い。2階層しかないなら、あんまり問題にならないかもしれないけど。

「テーブルの正規化」は、ちょっと意味が違うので、ちゃんとそれを解説しているページを探して読んでください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>親子でtableを分離すると逆に面倒
はっきり言っていただけると、助かります。

また、「ツリー型」に該当することや、3種類の特徴について詳しく説明いただいだので、
大変参考になりましたー

お礼日時:2012/10/19 13:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!