顧客の支払いをデータベースに保存するプログラムを作成しています。
1 つの製品に対して複数回支払うことは可能ですが、顧客が行う支払いごとに個別の列を作成したくありません。
支払いごとに新しい列を追加して、列の数を可変にすることを考えましたが、これは私には悪い解決策のようです...
助言がありますか ?
テーブルは次のようになるはずだと思います。
ID ClientID ProductID Payment????.....
製品販売シナリオの一般的なデータベースの正規化は次のとおりです。
Table: Product
(pkey) ProductID
BarCode
ProductName
Price
etc... (product description, and stuff)
Table: InvoiceItem
(pkey) InvoiceItemID
(pkey) InvoiceID
(fkey) ProductID
Quantity
Table: Invoice
(pkey) InvoiceID
*some people like InvoiceTotal here, but then you end up with multiple authorities for the total of the invoice, I prefer to derive the InvoiceTotal from the sum of InvoiceItems*
Table: Payments
(pkey) PaymentID
(fkey) InvoiceID
PaymentAmount
PKEY は、テーブル内の行の主キーを指します。FKEY は、別のエンティティへの外部キー関係を参照します。
最終的に (これらすべてを結合すると)、1 つまたは複数の支払いが記載された 1 つの請求書と、クレジットとデビットが異なる列にある垂直のテーブルができあがります。これにより、請求書に複数の製品を同じ合計で含めることができ、同じ請求書に複数の支払いを適用することができます。上で指摘したように、列を動的に追加することは何よりも混乱を招きます。リレーショナル データベースの設計は、既知の一連の列、不明な数の行でデータを結合することがすべてです。