2010-11-25 11 views
0

私はMS 2010アクセスデータベースを使用して、出荷のCSV入力の料金を計算しています。複数の変数に基づいて料金を計算するデータベース設計

料金は、一般に、出発地の都市、出発地の国、目的地の都市、目的地の国、可能な途中の目的地の都市、重量、量、および数量によって区別されます。これらの変数のユニークな組み合わせは、これらの変数に重量、量、または量を掛けてそれらを加算することによって、最終レートを計算するために使用される変数の別のリストを指定します。

1つの問題は、都市名と国名/綴りに矛盾があることです。私の他の関心事は、データを複数のテーブルに分割することによって利益を得ることができると感じているが、これを最もうまく達成する方法がわからないということです。

編集: あなたの批判ありがとうございます。私の質問は、このデータベースを構成する最善の方法は何ですか?ここで私のテーブルの簡単な例である:

レート(startCity、startCountry、midCity、midCountry、endCity、endCountry、タイプ、重量、体積、baseRate、feeA、feeB、FEEC、配達、燃料)

すべてが1つのテーブルにあり、実際には一意の識別子/キーを持っていません。代わりに、場所やタイプの少なくとも1つが異なるという点で、それぞれの行は一意です。

CSV入力: shipmentID、startCity、startCountry、midCity、midCountry、endCity、endCountry、タイプ、重量、容積、数量

クエリ出力: shipmentID、{数量* [baseRate +重量(* feeA + feeB)+ volume *(feeC)+ delivery + fuel]}

+0

あなたの質問は何ですか?懸念を表明し、問題について話していますが、実際に質問することはありません。 – Oded

+0

唯一の実際の質問は、都市と国のデータに異形があり、その問題を回避する方法を理解する必要があるようです。右?最後の段落は、あなたの頭の中に何があるのか​​わからないので、何の選択肢も示唆することさえできないので、役に立たない。 –

+0

データベースの構成方法に関する有意義なアドバイスを得るために、最終的な金利を計算するために使用される公式を共有する必要があります。また、綴りの不一致は「データ」問題であり、「データベース」問題ではありません。 – Vinayak

答えて

1

私はあなたの質問を理解しているか分からない。

場所(ID、cityname、郵便番号、COUNTRY_ID)

(ID、COUNTRYNAME)

:あなたはデータベース構造を探しているなら、私は、次の3つのテーブルを思い付くでしょうルート(id、startlocation_ID、midlocation_ID、endlocation_ID、ratefactor)

最終レートはおそらく数式に基づいています。式の経路依存部分は、「ratefactor」として「経路」表に入れる必要があります。数式の他の部分もテーブルに入れる必要があるかどうかは、式自体に依存します(それについて十分に教えていない)。都市/国名の入力は、ユーザーが既に入力されているものの中からのみ選択できるドロップダウンリストで行う必要があります。ほとんどの場合、ユーザーは既に入力済みの通常ルートでルートテーブルを使用するでしょう。あなたの会社が世界のどの場所にもサービスを提供している場合は、もちろん、新しい都市名を入力することを避けることはできません。

更新日:編集後、database normalizationのトピックを詳しく見ることをお勧めします。たとえば、「料金」表には、重量だけが異なる多数の同一のルートがあるように見えます。ですから、私がすでに提案しているように、経路情報を別々に保つことは理にかなっています。追加情報は別の表に記載してください(:id、route_ID、type、weight、...)。

"(feeA + feeB)"と "feeC"は私の提案で言及したレートファクターのようです。しかし、私はfeeAとfeeBの両方を持っている理由は見当たらない。それらが都市との接続の価格を参照している場合、この情報を別々に保つ必要がある場合は、別のテーブル(connectionprice:id、locationA_ID、locationB_ID、価格設定)に価格情報を保存し、新たに毎回それを入力する代わりに。

フィールドの組み合わせが一意の識別子を作るフィールドがある場合、別のPKは必要ないと主張することはできますが、それでも各テーブルのID( "id")を作成するという習慣があります。ほとんどの場合、プログラミングアクセスと情報検索が非常に簡単になります。

+0

これまでのご協力ありがとうございます。 feeAとfeeBは別々に変更されるかもしれないので、私は重み*(feeA)+重み*(feeB)を書くことを避けるために一緒に追加しました。 CSV入力で同じレートを複数回使用することは可能です。あなたが提案したようにテーブルを分割しますが、レートファクタは複数のコンポーネントで構成されています。たとえば、(ratefactor = feeA + feeB + feeC)、別々に各料金を保存したいので、将来のあるときには「feeB」​​を更新することができます。この計算をどのように処理すればよいですか?別のテーブルに? – duckah

+0

計算コンポーネントの配置場所は、決定方法によって異なります。たとえば、feeA/feeBが実際に2つの関連する場所のみに基づいている場合(つまり、この数式コンポーネントは顧客やその他の影響に関係なく同じままです)、テーブル「connectionprice」でルックアップすることができます。再度料金表に重複して課金する。より良い回答を得るには、データをモデル化したいものをより詳細に開示する必要があります。私は恐怖stackoverflowのQ&Aシステムは、現在の反復的なアプローチにはうまくいかない:) – Ray

関連する問題