Eコマースデータベースを構築し、サブスクリプションを追加しています。以下の簡略化された構造を参照してください。
orders
id, customer_id
order_items
id, order_id, product_id
invoices
id, order_id
subscriptions
id, customer_id, product_id, run_date
私が抱えている問題はinvoices
テーブルがorder_id
を必要とすることですが、サブスクリプションは請求書を生成するだけです。元のorder_id
をサブスクリプションテーブルに入れて系統を追跡することもできますが、invoices
テーブルに重複した注文IDがあるため、混乱を招きます。 order
とorder_items
を削除してinvoices
テーブルを保持し、invoice_items
テーブルを追加して注文IDを完全にバイパスすることを試みましたが、保持する方が理にかなっていると思いましたなぜなら、人々はTシャツのような通常の製品も購入でき、それらは技術的に注文だからです。請求書が正しく生成されるようにテーブルを構成する推奨方法はありますか?注文は、単一購入の製品に対するものであり、サブスクリプションに対する請求書のみであるべきですか?
十分な情報はありませんが、悲しいことにコメントを投稿する評判が足りないので、前提としていても頑張ります。
お役に立てれば。
注文請求書支払いパターンは、会計でよく見られるものです。これらのテーブルは、ビジネスモデルの「財務」の部分に属しています。入ってくるお金を顧客の要求に結びつけることができることは、十分に確立された慣行です。あなたの財務監査人はその証跡をたどり、そこの行を他のレコードと照合できると期待します。
Subscriptions
は、取引に持ち込むための他のチャネルとともに、モデルの「販売」部分に属します。サブスクリプションは複数の外部キーを請求書と共有する場合がありますが、それらは異なるライフサイクルを持つ別個の概念です。たとえば、サブスクリプションは有効期限が切れると削除される可能性がありますが、請求書はたとえば税務目的で7年間保持する必要があります。
質問に表示するのと同じようにテーブルを保持することをお勧めします。サブスクリプションが作成されると、対応する注文と請求書を自動的に生成します。これは、アプリケーションで、またはDBMSトリガーを介して実行できます。 Subscriptions
とOrders
の間には1対1の関係があります。外部キー列をSubscriptions
に追加して、Orders
が注文のソースにとらわれないようにする必要があります。
説明が難しいという事実は、設計、期待、または認識されている要件に問題があることを示しています。
Subscriptions
は、クレジットカードなどから自動的に支払われますか? Invoice
が不要に見えるのはそのためですか?またはその他の理由。
あなたの現在の状態は:
Customers
は、次の2つの方法のいずれかで製品を購入できます。
Orders
require Invoices
。おそらくあなたはそれらが支払われるようにそれらを請求する必要があります。Subscriptions
にはInvoices
がありません。サブスクリプションは、クレジットカード、Paypalなどによって自動的に支払われる可能性があります。Customer
はユーザーとの対話方法を決定するため、そのCustomer
には複数のSubscriptions
があり、Orders
を配置することもあります。そして、私は顧客が好きならいつでもcancelSubscription
できると思います。
したがって、お客様とお客様の両方が、注文とフルフィルメント(Invoice
またはSubscription
)の完全な記録を保持する理由があります。つまり、Invoice
に対しても、何らかのSubscriptions
が必要になる可能性があります。
これを処理する方法は2つあります。つまり、同じものとして扱うか、2つの異なるものとして扱います。
Subscriptions
サブスクリプションインスタンスのフルフィルメント用のInvoice
を作成します。サブスクリプションInvoice
は、サブスクリプションInvoice
を識別するために、Invoice
に使用するスキームとは異なるスキーム(たとえばSUB-Number-Date)を持つことができますOrder
の場合(eg INV:InvoiceNumber)。 [私は、サブスクリプションInvoice
がすでに支払われているとマークされると思います。]
サブスクリプションのヘッダーと各フルフィルメントを追跡するログを含むSubscriptions
ログを作成します。これにより、Customers
のSubscriptions
が満たされるたびに詳細を追跡できます。サブスクリプションが早期にキャンセルされた場合、それは顧客に未使用の金額を払い戻すために使用できます。
組織がCustomers
(個人または企業)をどのように見ているかは、ビジネスに最適なアプローチを決定するのに役立ちます。
どうしましょう? Order Invoice
をより複雑なSubscription Invoice
から分離する傾向があります。必要に応じて、注文、サブスクリプション、および(返品、再発送など)の合計の概要を会社および顧客向けに作成できます。