回答編集履歴

1

回答を追記

2016/08/24 06:08

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

test CHANGED
@@ -63,3 +63,83 @@
63
63
 
64
64
 
65
65
  (さらに言うと、'バリエーション'テーブルの'id'カラムがプライマリキーでなくとも、同様の理由により'画像'テーブルの'id'カラムは不要です。)
66
+
67
+
68
+
69
+ # 追記
70
+
71
+
72
+
73
+ #### 共通画像とバリエーション画像のどちらも複数の画像を登録します
74
+
75
+
76
+
77
+ であれば、私の回答の
78
+
79
+ 「'商品共通の画像'を持たない'商品'があり得る」
80
+
81
+ に若干の修正を加えるのが良さそうです。
82
+
83
+
84
+
85
+ 具体的には、'商品共通の画像'テーブルに'item_id'カラムを追加し、
86
+
87
+ 外部キー制約を
88
+
89
+ ```
90
+
91
+ item.id <- common_image.item_id
92
+
93
+ ```
94
+
95
+ という紐付けに変更します。
96
+
97
+
98
+
99
+ これなら、'商品共通の画像'も1つの商品につき複数、登録できます。
100
+
101
+
102
+
103
+ #### jawaさんの方法(中略)では不十分でしょうか?
104
+
105
+
106
+
107
+ 「可能か不可能か?」
108
+
109
+ で言えば可能ではありますが、私はお勧めしません。
110
+
111
+
112
+
113
+ この方法は
114
+
115
+ 「'商品共通の画像'は'商品'に属する('バリエーション'に属するわけではない)」
116
+
117
+ という、このデータモデルが持つ本来の関係性が崩れているからです。
118
+
119
+
120
+
121
+ 関係性が崩れたテーブル設計は、予期しない別の問題を生む可能性があります。
122
+
123
+
124
+
125
+ 現状は
126
+
127
+ > バリエーションを結合させるときはvariation_idから0を除外する条件を付けるだけでいける
128
+
129
+
130
+
131
+ とお考えのようですが、今後、例えば
132
+
133
+ 「商品ごとのバリエーションの数を表示したい」
134
+
135
+ となった場合、全ての`COUNT(*)`から -1 した値を表示しなければならなくなるなど、他のあらゆる場所で
136
+
137
+ 「variation_id = 0 は特別」
138
+
139
+ であることを意識しなければならなくなります。
140
+
141
+
142
+
143
+ 開発者が(今後もずっと)msx2 様お一人なら問題が生じる可能性は低いかもしれませんが、
144
+
145
+ 複数人で開発していたり、担当が交代する可能性があるのであれば、この「意識」を全員が維持しつづけるのは意外に難しいものです。