2012-04-25 4 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

請求書明細表

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

その請求書

請求書テーブルに固有の各ラインのものに保ちます請求書明細テーブルに別のエントリとして保存されますか?また、請求書に属するすべての明細に同じ請求書IDがありますか? –

+0

@ToddBauer正しい。各請求書には、ID付きの請求書レコードがあります。各請求書の各明細に対して、明細を請求書に接続する「InvoiceItem」を作成します。複数の同一アイテムを請求書に追加できる場合は、 'InvoiceItem'に' quantity'カラムを付けるのが一般的です。 – dasblinkenlight

+0

優秀!数量行も追加します。トピックから離れて、私はあなたの説明であなたがよく話していることを伝えたいと思っていました。私はあなたの時間と努力に感謝します。回答:選択されました。良い戦いを続けてください。 –

1

実際に4番目のテーブルを追加したいと思うようです。ユーザーは、それぞれ1つずつ、複数の請求書明細を持っている場合は、あなたのデータを正規化するには、だけなので

InvoiceId 
ItemId 
関連する問題