次のビジネス ロジックで構成される請求アプリケーションを構築しています。
a)顧客に新しい注文を出します。(注文は、見積書、請求書、注文書の 3 つの関連コンポーネントのグループです)
b)注文後、新しい見積もりを作成できます。1回のご注文で1回のお見積りとなります。
c)注文の見積もりを参照して。請求書を作成できます。請求書は価格の割引の対象となります。アイテムの詳細とは別に、請求書はいくつかの費用で構成されます。注文には 1 つの請求書のみを含めることができます
d)注文の請求書を参照して、PurchaseOrder を生成できます。PurchaseOrder は、ベンダーの購入に関するアイテム情報で構成されます。注文には複数の PurchaseOrder を含めることができます。
これが私が思いついたデータベーステーブルのデザインです。
すべてが良さそうに見えますが、注文の特定の見積もり、請求書、または注文書に属するアイテム リストをどこに保存するかを決めるのに苦労しています。
私はいくつかの解決策を考えていました。
アプローチ A :アイテム リストごとに異なるテーブルを作成します。(見積もり、請求書、注文書)
テーブル :estimate_item
, .(このテーブルにはinvoice_item
、purchaseorder_item
上の画像の order_item と同様の列が含まれています)。
問題:このアプローチの問題は、3つのテーブルすべてが同一の情報を格納する同一の列で構成されていることです。唯一の違いは、格納される外部キーです。アプローチ B:項目リスト テーブル
order_item
tablenameを 1 つ作成します。order_item
問題:外部キーは 3 つの異なるテーブルから取得できるため、このテーブルに何を外部キーとして保存すればよいかわかりません。このテーブルで外部キーを処理するいくつかの方法を次のように考えました。1)foreignKey テーブル参照列:タイプ (例の値: 見積もり、請求書、購入注文) ForeignKey 列: type_id (3 つのテーブルのいずれかのforeignKey で構成)
問題:列名の命名規則を使用していtablename_id
ます。外部キー。この方法はルールに違反しています。2) 外部キー列:
order_id
,estimate_id
,invoice_id
,purchaseorder_id
.
問題:不要な外部キー列が定義されています。
order_item
外部キーをテーブルに保存して、注文と見積もり/請求書/購入注文も識別する方法を知りたいです。
テーブルの関係は次のとおりです。
id
すべてのテーブルの主キーです
table name: order relates to (contact, estimate, invoice, shipment) tables.
column name: contact_id (foreign key(referring to id column of the contact table)).
column name: estimate_id (foreign key(referring to id column of the estimate table)).
column name: invoice_id (foreign key(referring to id column of the invoice table)).
column name: shipment_id (foreign key(referring to id column of the shipment table)).
tablename: purchaseorder (this have one to many relationship with order table)
column name: order_id (foreign key(referring to id column of the order table)).
column name: contact_id (foreign key(referring to id column of the contact table)).
問題は、order_item テーブルに外部キーを格納する方法についてです。
ありがとうございました。
更新 1:
estimate
各テーブル、invoice
およびpurchaseorder
には独自のアイテムがあり、互いに関係がないことに注意してください。