重要なお知らせ

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

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

ご教授お願いします。

靴マスタ(スニーカーA、スニーカーB、サンダルA・・・)
色マスタ(赤、青、黄色、黒・・・)
素材マスタ(皮、ビニール、木・・・)

上記3マスタがあるとします。
靴受注システムにおいて、靴マスタを選んだ際に、
組み合わせとして可能な「色(色マスタより)」、「素材(素材マスタより)」だけを選択させたいという仕様があります。

それらの組み合わせを制御するために、
下記画面の様な「組み合わせマスタ保守」を用意しようと思います。

靴:スニーカーA
----------------------
「選択可能色」  「選択可能素材」
   黒        皮
   赤        

上記により靴受注画面においては
「スニーカーA」を選んだ時点で、色は(黒or赤)、素材は(皮)
という選択しか出来なくなります。
※色と素材の組み合わせは制御しません。


上の内容において「組み合わせマスタ」のテーブルレイアウトは
どのように設計すべきでしょうか?

考えているのは色も素材もある程度種類に上限があるので、
下記の様に列側に持たせようと思っているのですが・・・

靴     |区分(色 or 素材)|種類1|種類2|~|種類99|
スニーカーA|色        |黒  |赤  |
スニーカーA|素材       |皮  |



スニーカーB|色        |黒  |赤  |黄  |
スニーカーB|素材       |皮  |ビニル|合皮 |

このように色・素材を列側に持たせる方針がどうなんだろう・・・という思いがあるのですがいかがでしょうか?

同様な仕様の場合に、皆さんはどのように設計されますでしょうか?
お知恵を拝借できればと思います。

A 回答 (1件)

>下記の様に列側に持たせようと思っているのですが・・・



これはいけません。正規化の原則以前に使いづらいですよ。
あとで「赤が選べる靴はどれか」「4色以上選べる靴はどれか」「色別の注文状況が見たい」って聞かれたときに死にます。
(OR文やUNIONの嵐になります)
外部制約も掛けられません。

1)「組み合わせマスタ保守」ではなく、「色組み合わせマスタ保守」と「素材組み合わせマスタ保守」を用意する
 ・色組み合わせマスタ保守(靴、色)
 ・素材組み合わせマスタ保守(靴、素材)
 それぞれ、靴マスタと色マスタ、靴マスタと素材マスタに対する外部キー制約を掛けます。

2)「組み合わせマスタ保守」を以下のレイアウトにする
 ・組み合わせマスタ保守(靴、区分、連番、色、素材)
 靴、色、素材にそれぞれ外部キー制約を掛けます。

 色と素材のいずれかしか収録されないので、主キーがなくなり、代替キー(連番)を振って靴・区分・連番で主キーにします。
 テーブルは1つで済みますが、NOT NULL制約も掛けられず、検索・更新効率は悪くなります。

普通は1)の考え方です。
横並びの情報がパッとみたいのであれば、別途CASE、MAXを使ったビューを作成すればよいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます!

少し考えましたが・・・色んな点で1)のメリットの多さを
理解しました。

1)のパターンだとたとえば色組み合わせマスタ保守内の
レコード数が「靴の種類×色の種類」となるので、かなり数が
多くなりそれはどうなのだろう・・・と考えていたのですが、
それは問題ではないのですね。

大変勉強になりました。

お礼日時:2009/06/11 19:21

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

関連するカテゴリからQ&Aを探す