人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

DB設計の基本について

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

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

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

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

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

●質問者: kou32rr
●カテゴリ:インターネット ウェブ制作
✍キーワード:DB カテゴリ タイトル パターン フィールド
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● memo77
●27ポイント ベストアンサー

基本的には

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

ですね。

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



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

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

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

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

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

◎質問者からの返答

ありがとうございます。

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

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

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

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

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

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


2 ● きあ
●27ポイント

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

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

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

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

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

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

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

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

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

2の方法でやった場合、

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

◎質問者からの返答

ありがとうございます。

なるほど納得です。

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

すっきりしました。


3 ● pahoo
●26ポイント

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

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

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

◎質問者からの返答

ありがとうございます。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ