前提
ある商品の注文管理システムのDB設計を考えています。
注文をする際に管理者が事前に登録をしておいたオプション事項を注文者が設定できる場合の注文管理の方法が分からないので質問させていただきました。
例
お弁当を例に簡易的に、
- 商品は商品Aひとつのみ
- 注文の際に「サイズ」(大,中,小), 「箸」(あり,なし)が選択できる
- これらオプションの種類は管理者が別の管理画面にて追加、削除ができる。
(ex. 後から「袋」(あり,なし)が追加できる)
これらを実現するためにまず下記のようにテーブル設計。
■ 商品テーブル
id | 名前 |
---|---|
1 | 商品A |
■ オプションテーブル
id | 商品id | 名前 |
---|---|---|
1 | 1 | サイズ |
2 | 1 | 箸 |
■ オプション明細テーブル
id | オプションid | 名前 |
---|---|---|
1 | 1 | 大 |
2 | 1 | 中 |
3 | 1 | 小 |
4 | 2 | あり |
5 | 2 | なし |
そして、とある利用者が一度に注文を
・商品A / サイズ大 / 箸あり => 3個
・商品A / サイズ中 / 箸あり => 2個
・商品A / サイズ中 / 箸なし => 2個
とできるとします。
検討したこと
良い設計が思いつかず、一つ思いついたのは下記です。
■ 注文
id | ユーザid | 日付 | 個数 |
---|---|---|---|
1 | 1 | 20220607 | 7 |
■注文明細
id | 注文id | オプション | 個数 |
---|---|---|---|
1 | 1 | 1,4 | 3 |
2 | 1 | 2,4 | 2 |
3 | 1 | 2,5 | 2 |
(「オプション」へ設定されたオプション明細のidを列挙)
1カラムに複数値入れるのはアンチパターンと言われているので、最悪これなのかなと思いつつ他に良い方法が思いつきません。
オプションが固定であればカラムをオプションごとに作ればよいのですが。。。
回答4件
あなたの回答
tips
プレビュー