DB設計の基本について


例えば一つのレコードが複数のカテゴリに関連する場合、
(レコード1は、カテゴリ1と2に属する)

■レコードテーブル
・レコードID
・タイトル
・内容

■カテゴリテーブル
・カテゴリID
・カテゴリ名

どちらの方がベターな設計でしょうか?
1.レコードテーブルに「カテゴリID」フィールドを用意し、カンマ等で区切って格納する。
2.レコードとカテゴリを関連付けするテーブルを用意する。

今まで2のみでやってきましたが、1のパターンも見ることがあるため質問してみました。
どちらかではなく、こんなときはこっちの方がよいという例があればそれもありがたいです。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/04/01 09:36:14
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:memo77 No.1

回答回数238ベストアンサー獲得回数20

ポイント27pt

基本的には

>2.レコードとカテゴリを関連付けするテーブルを用意する。

ですね。

私が設計する場合なら、よほどのことがない場合はこうします。



「よほどのこと」というのは

・カテゴリに対する検索が発生しない

・複数行のレコードがそれぞれどのカテゴリに属しているかを横に連結して表示させるクエリが圧倒的に多い

・絶対に仕様の拡張が発生しない

という、まああまり考えたくない仕様ですw

id:kou32rr

ありがとうございます。

今まで2でやってきたのですが、

1だとテーブルの数を減らせるのでスマートになる場合もあるのかな

という不安に駆られて質問しました。

たまにレコードテーブルにカテゴリフィールドを固定で5つ用意するパターンも見ます。

この場合これ以上の拡張は無い前提ですが、

他の場合に流用できないのでどうなのかなと感じていました。

2009/03/31 19:15:34

その他の回答2件)

id:memo77 No.1

回答回数238ベストアンサー獲得回数20ここでベストアンサー

ポイント27pt

基本的には

>2.レコードとカテゴリを関連付けするテーブルを用意する。

ですね。

私が設計する場合なら、よほどのことがない場合はこうします。



「よほどのこと」というのは

・カテゴリに対する検索が発生しない

・複数行のレコードがそれぞれどのカテゴリに属しているかを横に連結して表示させるクエリが圧倒的に多い

・絶対に仕様の拡張が発生しない

という、まああまり考えたくない仕様ですw

id:kou32rr

ありがとうございます。

今まで2でやってきたのですが、

1だとテーブルの数を減らせるのでスマートになる場合もあるのかな

という不安に駆られて質問しました。

たまにレコードテーブルにカテゴリフィールドを固定で5つ用意するパターンも見ます。

この場合これ以上の拡張は無い前提ですが、

他の場合に流用できないのでどうなのかなと感じていました。

2009/03/31 19:15:34
id:kia_44 No.2

回答回数396ベストアンサー獲得回数30

ポイント27pt

>たまにレコードテーブルにカテゴリフィールドを固定で5つ用意するパターンも見ます。

1を利用する場合、まさにこれですよね。

こんな事例がありました。

商品Aの規格をデータベースに格納する際に、どのように入れたらよいかというものです。

角度が10度刻みのものもあれば5度刻みのものもあり、式にできない適当な刻みも存在してたり・・・。

5,10,18,22,50,100,120,180といった感じです。仕方がないのでカンマ区切りにしました。

このデータは発注などの入力制御にも使用します。

そのフィールドにあるかどうかで判断できるのでこれでよかったんじゃないかと思います。

フィールドの数が固定ではないのでこちらをえらびました。

2の方法でやった場合、

上記の例だと8個のレコードになるので、在庫処理をする際にめんどくさく感じて。

id:kou32rr

ありがとうございます。

なるほど納得です。

レコード数を意味もなく増やすことには疑問を感じていました。

すっきりしました。

2009/04/01 09:35:13
id:pahoo No.3

回答回数5960ベストアンサー獲得回数633

ポイント26pt

memo77 さんが回答しているように、RDBの原則では「2.レコードとカテゴリを関連付けするテーブルを用意する」となります。

しかし、Web業務ではカテゴリIDが変化することが多いので、「1.レコードテーブルに「カテゴリID」フィールドを用意し、カンマ等で区切って格納する」を使うことが多くなっています。

たとえば、HTML の <meta name="keywords"> タグのようなデータ構造の場合、「カテゴリID」ではなく「カテゴリ名」そのものをカンマ区切りで記述するような形になっています。

id:kou32rr

ありがとうございます。

いろいろと知識の根拠付けができました。

2009/04/01 09:35:58
  • id:memo77
    いるか、ありがとうございます。
    id:pahooさんの回答は私も参考になりました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません