我有多种货币(它们不是真的)和它们之间的汇率。e、 g.货币a,货币b,1.5如果我需要交换a->b,我只需将值乘以1.5,或者如果我需要交换b->a,我将值除以1.5。如何在数据库中正确地表达这一点?
a11xaf1n1#
这种方法是一种m:m方法,只是两边都引用同一个父表。pk保持不变,但每个pk也应该是fk。示例布局可能类似于:
create table currency ( id_currency serial , code text , name text , constraint currency_pk primary key (id_currency) , constraint currency_bk unique (code) ) ; create table currency_conversion( from_currency integer , to_currency integer , rate number(9,5) , constraint currency_conversion_pk primary key (from_currency,to_currency) , constraint from_conversion_2_currency_fk foreign key (from_currency) references currency(id_currency) , constraint to_conversion_2_currency_fk foreign key (to_currency) references currency(id_currency) );
093gszye2#
您只需要有一个转换表,其中有两列作为转换因子:
from_currency to_currency rate A B 1.5 B A 0.66667
在这种方法中,速率是乘法的,并且两个速率对都被存储。这应该使它易于使用。为了提高性能,您需要在 (from_currency, to_currency) .
(from_currency, to_currency)
2条答案
按热度按时间a11xaf1n1#
这种方法是一种m:m方法,只是两边都引用同一个父表。pk保持不变,但每个pk也应该是fk。示例布局可能类似于:
093gszye2#
您只需要有一个转换表,其中有两列作为转换因子:
在这种方法中,速率是乘法的,并且两个速率对都被存储。这应该使它易于使用。
为了提高性能,您需要在
(from_currency, to_currency)
.