2013-12-14 5 views
0

다음 디자인에 문제가 있습니까? 기본적으로 두 가지 항목 (예 : $ 20 및 $ 30)으로 분할 된 고객 (예 : $ 50)의 총 지불액을 추적하고 싶습니다. 하지만 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

어쨌든. 그것을하는 방법을 알아 내기 위해 google해야했다 (게시 hehe 후 15 의분을 기다려야한다) – Viet

관련 문제