繁体   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