web-dev-qa-db-ja.com

為替レート表とクエリのオンザフライ変換

私は小さなプロジェクトに取り組んでおり、アイテムを表示する通貨をユーザーが選択できるようになりました。

Java=を使用していて、DBからアイテムを取得した後、なんらかのAPIを使用してレートとポストプロセス(ループ)をプルすることを最初に考えました。しかし、クエリから適切な価格を直接取得できる場合は、不必要にループする必要はありません。

だから私はすべての為替レートをDBに保存し、クエリでここで会話ジョブを実行することになると思います。これが私の最初のドラフトです。

 CREATE TABLE currency (
      code VARCHAR(3) NOT NULL,
      symbol VARCHAR(3) NOT NULL,
      display_name VARCHAR(4) NOT NULL,
      PRIMARY KEY (code),
      UNIQUE KEY uq_ccode (code)
    );

CREATE TABLE exchange_rate (
  currency_code_from VARCHAR(3) NOT NULL,
  currency_code_to VARCHAR(3) NOT NULL,
  rate numeric(15,4) NOT NULL,
  created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (currency_code_from, currency_code_to),
  FOREIGN KEY (currency_code_from) REFERENCES currency(code) ON DELETE CASCADE,
  FOREIGN KEY (currency_code_to) REFERENCES currency(code) ON DELETE CASCADE
);

次に、次のようなクエリを記述します。

select price as originalPrice, (price * rate) as TargetPrice FROM .....
JOIN exchange_rate er ON er.currency_code_from=(the currency of the item) AND er.currency_code_to=(the user currency)......

上記の表では、すべての組み合わせが必要になることに注意してください

GBPEUR
EURGBP
GBPGBP (well i guess i can probably avoid this one if a slighty amend the query to detect this scenario)

さらに、このテーブルを毎日更新するには、何らかのcronジョブが必要になります。

今、私は銀行家でもSQLの天才でもありません。そのため、このようなテーブルやクエリを既に作成していて、この種の専門知識を持っている人々からの意見をお願いします

私は自分のデザインでうまくいきますか?結果を後処理してAPIからのレートでJavaで会話を行う方がよいでしょうか?

4
Alexis

原資産の価格はどのように保存されますか?

たとえば、アイテムの価格がすべてEURで保存されている場合、NxN(重複)通貨マトリックスは必要ありません。

この場合、 exchange_rate(EURまたは基本通貨に対して)は、currencyテーブル(独立したテーブルに対して)のフィールドにすることができます。

次に、表示用のすべてのコンバージョン(これらはすべて単にEUR-> XXXです)を1つのJOINで計算できます。

1