質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • データベース設計

    145questions

    データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

複数のテーブルを1つにまとめて区分で分けるのはありでしょうか?

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,258

msx2

score 149

商品データベースを開発しています。

商品を表すのに基本情報、カラー情報、サイズ情報、詳細情報の4つのテーブルを使うような設計にしています。

商品の基本情報を登録した後にカラー情報とサイズ情報を追加し、カラーとサイズの組み合わせの数だけ詳細情報のレコードができあがります。

このカラー情報とサイズ情報のテーブルですがテーブルの内容が全く同じです、最初は何も考えずに別々のテーブルとしていましたが1つのテーブルに集約して区分で分けてしまおうと考えています。

1つのテーブルを区分でわけて複数のテーブルとして使うのはアンチパターンかと思いますが、このケースであればデータの種類が複数あるという感じです。(カラー/サイズは言い換えればオプション1/オプション2となりますので)

素人設計で不安だらけなので皆様のご意見を伺いたく質問しました。
よろしくお願いします。


追記
テーブルのレイアウトはこんな感じです

■基本情報
basic_id
brand
name
list_price

■カラー情報
id
basic_id
color_seq
color_name

■サイズ情報
id
basic_id
size_seq
size_name

■詳細情報
id
basic_id
color_id
size_id
model_code

上記カラー情報とサイズ情報を下記のテーブルにまとめようと考えています

■オプション情報
id
basic_id
option_type
option_seq
option_name

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • motuo

    2017/02/15 18:05

    もう少し、データの内容を提示して頂けますか?なぜ、テーブルの内容が全く同じになるのかが気になります。上記の言葉だけみると「カラーとサイズの組み合わせの数」テーブルに登録する必要があるのかな、とも思えますし、そうであればむしろ詳細情報と1つにまとめてしまった方が良いのでは?という気もします。

    キャンセル

  • msx2

    2017/02/15 18:17

    ご指摘ありがとうございます。テーブルレイアウトを質問に追記しました。

    キャンセル

回答 3

+1

上記をみた感想ですが、たまたまレイアウトが現時点で合致しているだけ意味は異なっているので、個人的には設計はこのままの方が良いような気がします。
ちなみに、オプション情報を作ったとした場合は、そのレコード数はカラー×サイズとなるのでしょうか。
そうだとすると、なおのこと、レコード数が大変なことになる気もしますが…

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/15 18:33

    ご回答ありがとうございます。
    データを提示していませんでしたが、ある商品にサイズがS,M,L、カラーがBlack,White,Redだとすると、詳細情報のレコードは9件できあがります。
    オプション情報テーブルになった場合はS,M,L,Black,White,Redの6レコードです。
    組み合わせといっても商品毎なので膨大な数になるわけではありません。
    今思ったのですがカラー情報、サイズ情報っていうのはテーブルの名前が悪いですね、これらは単に名前を持っているだけで色やサイズに関する情報を持っていませんので。。

    キャンセル

  • 2017/02/16 09:06

    なるほど。どちらかというと、名称を持つテーブルを持ちたい、という事ですね。でしたら、下記の質問も参考になるかもしれません。いずれにせよ、この様な設計はあまりおススメではないようです。
    https://teratail.com/questions/28609

    キャンセル

  • 2017/02/16 14:19

    リンク先も参考になります。
    区分名称くらい汎用的なマスタでいいんじゃないかなと思うのは浅はかな考えなののでしょうか。。
    課税区分マスタ、国マスタとマスタが増えていって大変そうですね。

    キャンセル

  • 2017/02/16 14:24

    決して浅はか、というわけではなくシステム全体の規模感や、今後の修正の見込みにもよるとは思いますね。アンチパターンであっても、データの取得の容易さや検索速度が向上するというのであれば、あえて採用をするという事は良いと思います。

    キャンセル

  • 2017/02/16 14:33

    リンク先にもデメリットを理解した上でとありますし臨機応変に対応すればいいってことですよね。私の場合絶対的な経験値が不足しているのでいろいろとやってみようと思います。

    キャンセル

checkベストアンサー

0

扱っているのはどんな商品でしょうか?
衣類でしたら、同じデザインで色やサイズが違うものもあります。コートのようなある程度高価な商品でしたら、同じデザインで別の色があるから、その色の在庫はどこの店舗にあるか調べたいとか、同じデザインで1サイズ大きいものが欲しいが、どこに置いてあるか? などと検索したい、などと要望が出てくるものです。
集計時に同じデザインで、店舗毎で、、、まとめたいとか、システムを使う人たちからのヒアリング情報も欠かせません。
どんなテーブル設計になるかが決まってから、どんなSQLになるか、このSELECTにはこのテーブルとこのテーブルをjoinして、、、って話になるかと。もちろん、後でテーブルの変更が発生することが多いですが。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/16 09:40

    ありがとうございます。
    なるほど、悩んだらシステムでどんな使われ方をするか、どんなSQLになるかを検討材料に設計していくといいのですね。
    データの持ち方だけ考えていましたが確かに在庫や集計だって発生する話です。
    取り扱いは雑貨が多く元々カラー展開だけだったのをアパレルも出てきたのでサイズ展開にも対応しようと見直していました。

    キャンセル

0

(商品のテーブルとJOINして取得するという方法が面倒になるところはありますが)
1つのテーブルにすれば検索も早くなるでしょうし、ありだと私は思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/15 18:51

    1つのテーブルにする方が検索は早くなるんですね!
    ご回答ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • データベース設計

    145questions

    データベース設計はデータベースの論理的や物理的な部分を特定する工程です。