我正致力于开发必须处理多种货币(美元,欧元,日元)的信息系统。我们可以说,用户可以将产品添加到系统中。 用户在2017年2月13日添加产品#1,价格2000,货币JPY。 用户在2017年2月14日添加产品#2,价格25,货币USD。
稍后(2017年2月15日),用户可以查看和过滤他的产品,假设用户想要查看美元产品,并且有一个价格范围过滤器。
目标:
我目前的做法是:
问题:
我的问题是:
答案 0 :(得分:3)
货币汇率表在国际金融应用中很常见。通常,所有内容都被引用为一种货币的比率,例如美元。每天每种货币只需要一个条目,通常是前一天的收盘价 - 基本货币除外,它总是1.像这样:
Effective Code Factor
2015-05-02 GBP 0.662251656 --based on today's rate of 1.51 GBP->USD
从美元到英镑:美元*因素=英镑
从英镑到美元:英镑/因子=美元
有一个幻灯片演示文稿,显示了这样的表格设计here。货币讨论从幻灯片/第12页开始,第16页上的查询。表格设计很简单:
create table XRates(
Code char( 3 ) not null,
Effective date not null,
Factor decimal( 12, 9 ) not null
constraint PK_XRates primary key( Code, Effective )
);
有关该设计的一些不错的功能是,您可以将当前费率保持在同一个表格中,并且不需要每日更新。仅在费率更改时或当费率变化足以触发更新时才进行输入。该查询返回在给定日期生效的汇率,即使该汇率是由一个数周的条目(在今天的货币市场中不太可能)确定的。
当然,您可以将基础货币设置为欧元,但表格设计和查询不会改变。
因此您只需存储产品的价格和货币。定价为2000日元的产品的欧元价格可以很容易地根据有效的转换率进行转换,比如订单发出的那天。
答案 1 :(得分:2)
将原始价格存储在原始币种中。你的最后一个问题是商业决策,而不是技术决定,所以不要指望在这里给出答案。
选项1
为了处理灵活方式,我建议您创建一个单独的表结构来存储汇率。创建一个函数,该函数将返回具有每种可用货币汇率的表结构。通过这种方式,您可以轻松地从使用每日费率或其他任何内容进行交换 - 您将以最低的性价格隔离该逻辑。
下一步是创建一个SP来查询结果。这里的特殊要点是你应该修改你搜索的边界而不是实际值,这样你仍然可以使用表中的索引。你将使用函数的结果来生成一个包含货币和调整该货币的边界。你将加入那张桌子。
如果你需要,我可以发一个例子 - 如果是这样的话,可以提出答案或写评论。
选项2
如果您不需要灵活性或者您很少会更改汇率 - 再次将价格保存为原始货币,同时计算并存储价格统一货币。如果您不太关心标准化,可以在单独的表或新列中执行此操作。同样,通过修改边界并与预先计算的统一价格进行比较来进行搜索,以利用索引