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

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

新規登録して質問してみよう
ただいま回答率
85.50%
データベース設計

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

Q&A

解決済

3回答

6674閲覧

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

msx2

総合スコア174

データベース設計

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

0グッド

0クリップ

投稿2017/02/15 09:01

編集2017/02/15 09:16

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

商品を表すのに基本情報、カラー情報、サイズ情報、詳細情報の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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

motuo

2017/02/15 09:05

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

2017/02/15 09:17

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

回答3

0

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

投稿2017/02/15 09:26

motuo

総合スコア3027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msx2

2017/02/15 09:33

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

2017/02/16 00:06

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

2017/02/16 05:19

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

2017/02/16 05:24

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

2017/02/16 05:33

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

0

ベストアンサー

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

投稿2017/02/15 12:45

編集2017/02/15 12:51
Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msx2

2017/02/16 00:40

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

0

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

投稿2017/02/15 09:33

turbgraphics200

総合スコア4267

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msx2

2017/02/15 09:51

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問