簡體   English   中英

設計和存儲貨幣匯率交叉表

[英]Design and store a Currency Exchange Rates Cross Table

我需要在我的案例中使用RDBMS,MySql存儲貨幣匯率交叉表的值(例如http://www.exchangerates.org.uk/currency/currency-exchange-rates-table.html )。

用戶將每天更新數字,系統將存儲不同的版本。

我想知道你將如何設計表格或者你是否想要模型。

當然,最簡單的方法是使用帶有from,to和values列的表

from: char(3)
to: char(3)
value: decimal(6,4)
inverse_value: decimal(6,4)

但我很想知道是否有其他(更好的)解決方案。

非常感謝。

編輯

如果不清楚我會道歉,但我對性能和可擴展性特別感興趣。

保持value / inverse_value結構並給出90種貨幣,貨幣兌換交叉表每天需要4,050條記​​錄。

如果每天創建一個新版本,在一年內將有1,478,250個記錄,並且查詢可能開始受到影響。

我已經實現了這個表,它運行得很好,渲染交叉表非常快,我很滿意。

我只是想知道是否有更好的方法來實現這一點。

這似乎是一個好的開始,我還會添加一個日期字段(而不是日期時間字段,如果您每天只更新這些值)。 也許是這樣的:

currency_code_from: char(3)
currency_code_to: char(3)
conversion_value: decimal(6,4)
inverse_conversion_value: decimal(6,4)
effective_date: date()

我不確定您計划查詢表的各種方法是什么,因為這將決定您的索引要求,但我可能會在currency_code_fromcurrency_code_toeffective_date字段中使用復合主鍵,然后根據需要添加任何索引為您的特定查詢。

然后,您可能希望有一個附加表來存儲貨幣名稱和貨幣符號(如果需要顯示)(如果您想使用它也可能鏈接到國家/地區標志圖像)

currency_code: char(3)
currency_name: varchar(50)
currency_symbol: char(3)
currency_image: varchar(100)

該表的主鍵是currency_code。

Marco,您可能還需要一個日期字段或一個布爾值isCurrent,這樣您就可以選擇最新的ccy轉換。

你想買賣數字嗎? 通常,您確保在購買和出售ccy之間存在一些牽頭方式,以確保組織不會丟失。 這被一些人稱為明智的商業方法,並被其他人欺騙。

如果手動輸入這些數字,請確保查看上圖中的貨幣,如果差異> 3%,則警告用戶。

唯一的另一個問題是當天匯率波動很大。 你想在宣戰前堅持一次轉換嗎?

看起來你走在正確的軌道上。

我不會親自使用“自然”鍵。 相反,有一個國家/貨幣實體表:

country
-------
country_id : integer not null auto_increment
name : varchar(255)
abbrev : varchar(255)
motto : varchar(255)
. . .

然后使用交叉表中的ID:

currency_exchange
-----------------
currency_exchange_id : integer not null auto_increment
from_country_id : integer
to_country_id : integer 
value : decimal(10,4)
inverse_value : decimal(10,4)

這允許我將國家/地區的名稱更改為符號,全名,等等,而無需更改交叉表的定義。 查詢轉換值時加入兩個表。

另外,我用十進制(10,4),我建議查找最大值。 編程更新令人頭疼的是限制大小,后來發現你選擇了一個太小的大小。 它沒有占用足夠的空間來使處理這些錯誤值得。 對於名稱使用的varchar也是如此。 變量存儲有效。

此外, value總是不是1.00? (也就是說,您是否總是在另一種貨幣中從1轉換為某些反轉?)如果是這樣,您可以從表中刪除value列。

我個人喜歡在所有表上生成ID值,所以我把一個放在交叉表上,但是有些人可能會認為這是不必要的。 我經常發現,當我選擇將其遺漏時,我希望我已添加它。

我可以看到另一張表格中的貨幣名稱:

currency
--------
currency_id : integer not null auto_increment
country_id : integer
name : varchar(255)
symbol : varchar(255)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM