我必须创建一个表货币
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
我得到错误重复值是不允许的? 如何解决这个问题?
答案 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)
)