• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テーブル設計について)

テーブル設計について

このQ&Aのポイント
  • テーブル設計において、靴マスタ、色マスタ、素材マスタの組み合わせを制御する方法について質問があります。
  • 具体的には、「組み合わせマスタ」のテーブルレイアウトについてどのように設計すべきか悩んでいます。
  • 色と素材を列側に持たせる方針について、皆さんの意見や設計方法を教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

>下記の様に列側に持たせようと思っているのですが・・・ これはいけません。正規化の原則以前に使いづらいですよ。 あとで「赤が選べる靴はどれか」「4色以上選べる靴はどれか」「色別の注文状況が見たい」って聞かれたときに死にます。 (OR文やUNIONの嵐になります) 外部制約も掛けられません。 1)「組み合わせマスタ保守」ではなく、「色組み合わせマスタ保守」と「素材組み合わせマスタ保守」を用意する  ・色組み合わせマスタ保守(靴、色)  ・素材組み合わせマスタ保守(靴、素材)  それぞれ、靴マスタと色マスタ、靴マスタと素材マスタに対する外部キー制約を掛けます。 2)「組み合わせマスタ保守」を以下のレイアウトにする  ・組み合わせマスタ保守(靴、区分、連番、色、素材)  靴、色、素材にそれぞれ外部キー制約を掛けます。  色と素材のいずれかしか収録されないので、主キーがなくなり、代替キー(連番)を振って靴・区分・連番で主キーにします。  テーブルは1つで済みますが、NOT NULL制約も掛けられず、検索・更新効率は悪くなります。 普通は1)の考え方です。 横並びの情報がパッとみたいのであれば、別途CASE、MAXを使ったビューを作成すればよいと思います。

gonii
質問者

お礼

ありがとうございます! 少し考えましたが・・・色んな点で1)のメリットの多さを 理解しました。 1)のパターンだとたとえば色組み合わせマスタ保守内の レコード数が「靴の種類×色の種類」となるので、かなり数が 多くなりそれはどうなのだろう・・・と考えていたのですが、 それは問題ではないのですね。 大変勉強になりました。

関連するQ&A