私は小さなプロジェクトに取り組んでおり、アイテムを表示する通貨をユーザーが選択できるようになりました。
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で会話を行う方がよいでしょうか?
原資産の価格はどのように保存されますか?
たとえば、アイテムの価格がすべてEURで保存されている場合、NxN(重複)通貨マトリックスは必要ありません。
この場合、 exchange_rate
(EURまたは基本通貨に対して)は、currency
テーブル(独立したテーブルに対して)のフィールドにすることができます。
次に、表示用のすべてのコンバージョン(これらはすべて単にEUR-> XXXです)を1つのJOINで計算できます。