- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テーブル設計について)
テーブル設計について
このQ&Aのポイント
- テーブル設計において、靴マスタ、色マスタ、素材マスタの組み合わせを制御する方法について質問があります。
- 具体的には、「組み合わせマスタ」のテーブルレイアウトについてどのように設計すべきか悩んでいます。
- 色と素材を列側に持たせる方針について、皆さんの意見や設計方法を教えていただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>下記の様に列側に持たせようと思っているのですが・・・ これはいけません。正規化の原則以前に使いづらいですよ。 あとで「赤が選べる靴はどれか」「4色以上選べる靴はどれか」「色別の注文状況が見たい」って聞かれたときに死にます。 (OR文やUNIONの嵐になります) 外部制約も掛けられません。 1)「組み合わせマスタ保守」ではなく、「色組み合わせマスタ保守」と「素材組み合わせマスタ保守」を用意する ・色組み合わせマスタ保守(靴、色) ・素材組み合わせマスタ保守(靴、素材) それぞれ、靴マスタと色マスタ、靴マスタと素材マスタに対する外部キー制約を掛けます。 2)「組み合わせマスタ保守」を以下のレイアウトにする ・組み合わせマスタ保守(靴、区分、連番、色、素材) 靴、色、素材にそれぞれ外部キー制約を掛けます。 色と素材のいずれかしか収録されないので、主キーがなくなり、代替キー(連番)を振って靴・区分・連番で主キーにします。 テーブルは1つで済みますが、NOT NULL制約も掛けられず、検索・更新効率は悪くなります。 普通は1)の考え方です。 横並びの情報がパッとみたいのであれば、別途CASE、MAXを使ったビューを作成すればよいと思います。
お礼
ありがとうございます! 少し考えましたが・・・色んな点で1)のメリットの多さを 理解しました。 1)のパターンだとたとえば色組み合わせマスタ保守内の レコード数が「靴の種類×色の種類」となるので、かなり数が 多くなりそれはどうなのだろう・・・と考えていたのですが、 それは問題ではないのですね。 大変勉強になりました。