我被分配了一个货币汇率IN SQL的项目。如何保存货币的汇率?

时间:2013-12-12 09:45:07

标签: sql

我必须创建一个表货币

CREATE TABLE currencies (
       from_currency        CHAR(30) NOT NULL,
       ExchRate             REAL NOT NULL,
       to_currency          CHAR(30) NOT NULL,
       PRIMARY KEY (from_currency),
       FOREIGN KEY (to_currency) REFERENCES currencies(from_currency)
)

我必须保存6种货币的汇率:( inr,eur,cad,usd,gbp,cfp) 但问题是我无法在第一列中存储相同的值 即 我可以保存我的货币汇率,如下所示

from_curr      ER --> to_curr 
INR        --> 60 -->   USD
USD        --> 0  -->   USD
GBP        --> 70 -->   USD

e.t.c。所有的货币,但现在的问题是,当我试图存储其他呃像

的货币
INR        --> 1  -->   USD
or
GBP        --> 70 -->   USD 

我得到错误重复值是不允许的? 如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

您不是存储货币,而是存储一对货币。

CREATE TABLE currency_exchange_rates (
       from_currency        CHAR(30) NOT NULL,
       to_currency          CHAR(30) NOT NULL,
       ExchRate             REAL NOT NULL,
       PRIMARY KEY (from_currency,to_currency),
)

我还建议一个单独的表格,其中包含六种货币并链接上表以确保有效的货币代码。您可能还想要保留一个日期字段(并使其成为主键的一部分),因为费率会随着时间的推移而变化......

答案 1 :(得分:0)

您应该创建一个复合主键,因为一对2种货币可以为您唯一标识一条记录。

CREATE TABLE currencies (
   from_currency        CHAR(30) NOT NULL,
   ExchRate             REAL NOT NULL,
   to_currency          CHAR(30) NOT NULL,
   PRIMARY KEY (from_currency, to_currency)
)

或者您也可以为主键添加新列,例如as autoincrement column:

CREATE TABLE currencies (
   [Id] [int] IDENTITY(1,1) NOT NULL
   from_currency        CHAR(30) NOT NULL,
   ExchRate             REAL NOT NULL,
   to_currency          CHAR(30) NOT NULL,
   PRIMARY KEY ([Id])
)

答案 2 :(得分:0)

当然你不能。那是因为你定义了PRIMARY KEY ()。因此,此列仅允许不同的值。你需要的是from_currency / to_currency对是唯一的。您可以通过在表中定义复合PK来实现此目的:

CREATE TABLE currencies (
       from_currency        CHAR(30) NOT NULL,
       ExchRate             REAL NOT NULL,
       to_currency          CHAR(30) NOT NULL,
       PRIMARY KEY (from_currency, to_currency)
)