2013-12-12 59 views
0

我要創建一個表貨幣我已經爲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,歐元,加元,美元,英鎊,CFP) 但問題是我不能存儲相同值第一列 即 我能救我的匯率如下

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

等對於所有的貨幣,但現在的問題是,而我試圖存儲其他呃貨幣像

INR  --> 1 --> USD 
or 
GBP  --> 70 --> USD 

我得到的錯誤重複值不允許? 如何解決這個問題?

+0

作爲一個側面說明,你可能不應該存儲匯率作爲一個'REAL',因爲它是一個浮點值。除此之外,存儲的價值很可能不會成爲輸入的價值,人們傾向於獲得各種各樣的關於金錢的棘手問題。因爲您應該將所有金額存儲在基於'NUMERIC' /'DECIMAL'類型的東西中,所以無論如何,您都應該轉換爲該類型的所有操作。節省一些常見的轉換時間。 –

回答

0

您應該創建一個複合主鍵爲一對兩個貨幣的唯一標識爲你記錄。

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) 
) 

或者,您也可以爲主鍵添加一個新列,作爲自動增量列:

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]) 
) 
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), 
) 

我也建議一個單獨的表持有六種貨幣和鏈接上面的表格,以確保有效的貨幣代碼。您可能還需要召開日期字段(並使其成爲主鍵的一部分),因爲利率可以隨時間而改變......

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) 
)