2013-12-14 261 views
0

我的後續設計是否會出現問題?基本上,我想跟蹤一個客戶的總支付額(例如50美元),這個支付額分爲兩個項目(例如20美元和30美元)。但我希望能夠查看任何項目 - ITEM(ITEM_ID),並知道客戶在其總計帳單 - 付款(PAYMENT_AMOUNT)上的花費。爲了保持它的簡單我包括最少列:SQL指向同一主鍵的多個外鍵

CREATE TABLE ITEM (
    ITEM_ID   NUMBER(7,0)   NOT NULL, 
    ITEM_SALE_AMT  NUMBER(7,2)   NOT NULL, 
    PAYMENT_ID  NUMBER(7,0)   NOT NULL, 
    PRIMARY KEY (ITEM_ID), 
    FOREIGN KEY (PAYMENT_ID) REFERENCES PAYMENT(PAYMENT_ID) 
); 

CREATE TABLE PAYMENT (
    PAYMENT_ID  NUMBER(7,0)   NOT NULL, 
    PAYMENT_AMOUNT NUMBER(7,2)   NOT NULL, 
    ITEM_1   NUMBER(7,0)   , 
    ITEM_2   NUMBER(7,0)   , 
    PRIMARY KEY (PAYMENT_ID), 
    FOREIGN KEY (ITEM_1) REFERENCES ITEM(ITEM_ID), 
    FOREIGN KEY (ITEM_2) REFERENCES ITEM(ITEM_ID) 
); 

首先,每個項目都是獨一無二的(所以你不能對同一項目兩筆款項)。 顯然,如果客戶在一次交易中支付了很多物品,我的付款表中將會有很多列(但這在30年內通常不會發生,通常是1次,偶爾也會發生2次或3次)。

有沒有我沒有看到的主要缺陷,或者可以改進嗎?

回答

2

這是一個簡單的一對多關係。您應該取出PAYMENT表中的ITEM_1和ITEM_2列和關聯的外鍵。這些項目都通過ITEM表中的外鍵鏈接到他們的付款。這就是你需要的。

+0

非常感謝!試圖創建一個簡單的程序。如果我能加入,你會投票給你:) – Viet

+0

你應該仍然可以[接受答案](http://meta.stackoverflow.com/help/someone-answers) –

+0

只是做了。不得不穀歌找出如何做到這一點(必須等待15分鐘後嘿嘿) – Viet