0

データベースを設計しようとしていますが、私の設計がまったく意味があるかどうか疑問に思っています。

小さな社内コピー ショップのデータベースを設計して、注文と価格のジョブを追跡しようとしています。この情報を保存するには、リレーショナル データベースを作成するのが良い方法だと思いました。典型的な注文の例は次のとおりです。

  • 注文 #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 テーブルのフィールドです。そして、コードを使用して価格を計算します。より良い、より柔軟なものを設計したいと思います。

私は (明らかに) リレーショナル データベースの専門家ではないので、アドバイスをいただければ幸いです。ありがとう!

4

1 に答える 1

0

いつものように答えは「場合による」です。最初の例を挙げる:

The price of Order #1: [price of B&W prints on plain 8.5x11 paper]x[number of B&W pages] + [price of color prints on plain 8.5x11 paper]x[number of color pages] + [number of sets]x[price of staples]

3 つのパーツ (またはアイテム、製品、または SKU) が必要です: 8.5X11 の普通紙に白黒印刷、8.5X11 の普通紙にカラー印刷、ホッチキス。これらの部品にはそれぞれ価格があります (価格の履歴を維持し、部品ごとの現在の価格を確実に取得することに関連する問題がありますが、今は無視します)。次に、注文 #1 の価格は次のようになります。

amount of part1 * price of part1 +
amount of part2 * price of part2 +
amount of part3 * price of part3

2 番目の例では、「24x36 ポスター ラミネート加工され、フォームコアに取り付けられた」という部品を定義し、その価格を定義する必要があります。

属性のコストにパーセンテージを割り当てることができる場合 (たとえば、カラー印刷のコストは白黒印刷よりも 25% 高くなります [最近では逆かもしれませんが])、「8.5x11 の普通紙に印刷する」パーツを定義し、それに価格を割り当てます。属性テーブルに「追加料金のパーセンテージ」フィールドを追加し、属性「カラー プリント」に 25 (管理方法に応じて 0.25 または 1.25) の値を挿入します。

顧客に関して言えば、これを処理する 1 つの方法は、各顧客が価格表から受け取る一定の割引を定義することです。顧客が部品ごとに異なる割引を受ける場合、顧客 ID、部品 ID、価格の 3 つのフィールドを持つテーブルを定義する以外に選択肢はありません。

これは複雑に思えますが、最終的にはこれが最善の方法です。

于 2013-05-27T07:27:43.153 に答える