データベースを設計しようとしていますが、私の設計がまったく意味があるかどうか疑問に思っています。
小さな社内コピー ショップのデータベースを設計して、注文と価格のジョブを追跡しようとしています。この情報を保存するには、リレーショナル データベースを作成するのが良い方法だと思いました。典型的な注文の例は次のとおりです。
- 注文 #1: 7 白黒ページと 3 カラー ページの 100 セット、ホチキス留め、20 ポンド 8.5x11 の普通紙
- 注文 #2: 24 インチ x 36 インチのポスター 1 枚をラミネートし、フォームコアに取り付けます。
私が取り組み始めたデザインは次のとおりです。
たとえば、私は持っています:
- 商品: {コピー注文、ポスター}
- 属性: {白黒ページ、カラー ページ、セット、ステープル、用紙サイズ、用紙タイプ、ポスター サイズ}
- 属性オプション: {ステープル左上、...、8.5x11、...、プレーン 20 ポンド、...、24" x 36"、...}
これまでのところ、これは合理的だと思います。私が理解できないのは、価格プロファイルを追加する方法です。問題は、属性オプションの価格が他の属性オプションに依存し、すべての場合で異なることです。上記の例を使用すると、次のようになります。
- 注文番号 1 の価格: [8.5x11 普通紙のモノクロ プリントの価格]x[白黒のページ数] + [8.5x11 普通紙のカラー プリントの価格]x[カラー ページの数] + [セット数] x[ステープルの価格]
- 注文番号 2 の価格: [24x36 のポスターをラミネートしてフォームコアに取り付けた価格] x [ポスターの数量]
さらに、さまざまなタイプの顧客に対して異なる価格を請求するため、複数の価格プロファイルを持つことを計画しました.
リレーショナル データベースでこれを行う合理的な方法はありますか? または、他の方法で行う必要がありますか?既存のデータベースは設計が不十分で (数年前に私が作成したものです)、ほとんどの属性がフィールド名としてハードコーディングされており、製品ごとに個別のテーブルが用意されています。たとえば、paper_type は copy_orders テーブルのフィールドで、poster_size は poster_orders テーブルのフィールドです。そして、コードを使用して価格を計算します。より良い、より柔軟なものを設計したいと思います。
私は (明らかに) リレーショナル データベースの専門家ではないので、アドバイスをいただければ幸いです。ありがとう!