2012-04-25 2 views
4

인보이스 소프트웨어를 만들고 있는데 인보이스를 저장하고 싶습니다.데이터베이스에 송장 저장

사용자는 고객을 선택하여 인보이스를 작성하지만 많은 항목이 고객에게 청구됩니다. 대부분의 인보이스에는 여러 항목이 있습니다. 중복 항목없이 데이터베이스에 저장하는 가장 좋은 방법은 무엇입니까? 필요한 경우 전체 데이터베이스를 재 배열 할 용의가 있습니다.

내 표는 다음과 같다 :

고객 테이블 :

Id  /Primary key 
FullName 
Address 
Phone 

항목 표 (제공되는 제품의 테이블) :

Id  /Primary key 
ItemName 
Price 
Description 

송장 표 (저장 송장) :

Id  /Primary key 
CustId /Foreign key is Id in Customer table 
ItemId /Foreign key is Id in Item table 
Notes 

답변

7

송장을 저장할 다른 테이블이 필요합니다 (Invoices은 실제로 인보이스 아이템을 저장합니다).

Customer 
    id 
    name 
    etc. 

Item 
    id 
    name 
    etc. 

Invoice 
    id 
    cust_id 
    date 

InvoiceItem 
    id 
    inv_id 
    item_id 

이 접합 테이블 (즉 InvoiceItem)를 사용 many to many relationship 모델링 고전적인 방법이다.

+0

에 고유 한 각 라인 것들에 계속 송장 항목 테이블에 별도의 항목으로 저장됩니까? 인보이스에 속한 모든 항목의 InvoiceId가 같습니까? –

+0

@ToddBauer 수정. 각 인보이스에는 ID가있는 인보이스 레코드가 있습니다. 각 인보이스의 각 항목에 대해 항목을 인보이스에 연결하는 'InvoiceItem'을 작성합니다. 인보이스에 여러 개의 동일한 항목을 추가 할 수있는 경우에는 'InvoiceItem'에'수량 '열을 갖는 것이 일반적입니다. – dasblinkenlight

+0

우수! 수량 행을 추가 할 것입니다. 그리고 화제를 벗어나서, 나는 당신이 당신의 설명에 대해 잘 말하고 분명하다는 것을 말하고 싶었고, 당신의 시간과 노력에 감사드립니다. 답변 : 선택되었습니다. 좋은 싸움을 계속 싸워라. –

1

실제로 네 번째 테이블을 추가하려는 것 같습니다. 데이터를 정상화 만, 하나 하나 그 송장

청구서 테이블

Id  /Primary key 
CustId /Foreign key is Id in Customer table 
Notes 

송장 항목 테이블 따라서 사용자가 여러 송장 항목이있는 경우

InvoiceId 
ItemId