質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

1回答

158閲覧

条件の数が可変する組み合わせをデータベースに登録したい

nuages

総合スコア40

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2018/01/26 08:29

条件によって料金が異なるサービスがあり、次の要因があります。

  • コース
  • 個人/団体
  • 利用時間(h)
  • 平日/休日

カラオケやツアーのようなものをイメージしてもらうと近いかと思います。

サービスは複数あり、サービスによっては4つすべてを組み合わせて料金が決まるものや、コース、利用時間の2つだけで料金が決まるものなど様々で、今後要因が増える可能性もあります。
足し算や掛け算では値段は決まらず、すべての組み合わせに対して人間が料金を決めています。

そこでひとまず3つのテーブルを用意しました。

  • services ... サービスの名称
  • factor_groups ... 要因をカテゴリー分けしたもの(コースなど)
  • factors ... 値段を決める要因(Aコース、Bコースなど)

あとは組み合わせた結果の値段を登録するテーブル(service_charges)を作りたいのですが、要因数が決まっておらずどのように列を用意すればわかりません。

思いつくのは次のようなものです。

  1. 最大10要因に制限して charge, factor_1, factor_2, ..., factor_10 という列を作る
  2. JOIN を諦めてカンマ区切りか JSON などで複数の要因を1つの列に格納する
  3. 何らかの中間テーブルを作る(具体的にどう作ればいいのかはわかりません)

数が決まっていない組み合わせをテーブルに保存するにはどのような形をとるのが良いのでしょうか?
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

結果テーブルは作成せず、ビュー若しくはSQLで都度集計した方が良いかと思います。
原則として、計算で求められるものは、実項目を作らないのが良いとされています。

利用者が選択した結果については確定した金額とする必要があり、必ず計算で求められるものではない(契約後にマスターが変更されたり、値引きがあったり)のでテーブルは必要でしょうけど

投稿2018/01/26 09:08

編集2018/01/26 09:12
sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nuages

2018/01/26 09:58 編集

これを選ぶとプラス何円という規則性がなく、全部組み合わせた値段は手動で決められています。掛け合わせの料金表を表示するページもあるので全組み合わせを1つずつ値段を登録していくのですが、どのような列や構造を用意して記録したら良いのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問