web-dev-qa-db-ja.com

注文と見積もりテーブル-データベースの設計

以下は、eコマースサイトの注文部分の現在のdbスキーマのERDです。このサイトはoscommerceに基づいていますが、変更されています。また、図を簡略化するために、テーブルからかなりの数のフィールドを削除しました。

current erd

サイトの管理に見積もり作成機能を追加する予定です。見積もりは注文とよく似ており、ほとんどの見積もりは注文に変換されます。顧客の詳細など、ほとんどのフィールドは両方に表示されますが、それぞれに必要ないくつかの異なるデータがあります。また、元の見積もりを維持して、将来再び使用できるようにする必要があります。つまり、見積もりから作成された注文を変更しても、元の見積もりは変更されません。

類似性を考慮します。特に注文の子テーブルは、見積のデータを格納するために必要な形式であるため、見積の注文構造全体を複製する必要はありませんでした。

私が行くかもしれないと思ったアプローチは、注文に似た見積テーブルを作成し、その後、注文のほとんどの子テーブルを再利用して、見積も処理することです。

(おそらく、quotes_statusとquotes_status_historyには、orders_statusとorders_status_historyを複製しますが、見積もりには異なるステータスがあり、見積もりと注文には関連するステータスしかありません。)

私が引用に再利用したいと思っていたテーブル:

  • orders_total
  • admin_watch_list
  • orders_products
  • orders_products_attributes
  • orders_products_downloads

これらのテーブルを再利用するには、次のいずれかを実行する必要があるように思われます。

  • 上記の各テーブルにquotes_idフィールドを追加します。ただし、これらの各テーブルには 'quotes_id'と 'orders_id'があります。これらの1つは常に値を持ち、もう1つは常にNULLでなければなりません。
  • orders_idフィールドをquotesテーブルに追加し、私のquotesテーブルでorders_idの自動インクリメントを開始して1000000000とします。これにより、私の注文テーブルで0から始まった自動インクリメントのorders_idと干渉しなくなります。引用符で囲まれたorders_idは、orders_idを使用して他のすべてのテーブルを参照できますが、orders_idはordersテーブルに表示されることはありません

これらのソリューションはどちらも理想的ではないようで、自分がやりたいことを達成するためのより良い方法があるかどうか疑問に思いました。

理想的には、可能な限り再利用したいと考えています。これは、開発を迅速化し、将来維持する必要がなくなるためです。

私の管理には既に注文を編集するためのページがあり、注文の構造に近づけば近づくほど、注文の編集ページのコードを、見積りの作成/編集ページに再利用する方が簡単だと思いますたす。

すべてのヘルプやアドバイスをいただければ幸いです。

3
dading84

それらを組み合わせるのはどうですか?注文テーブルをベースにして、ステータスフィールドに値を追加します。

  1. 入力済み-入力中のデータ、開始されたばかり
  2. 見積もり-顧客に提供された見積もり
  3. 注文済み-顧客は見積もりを受け入れ、見積もりは注文に変換されました

ORDERS_HISTORYまたはORDERS_VERSIONテーブルがある場合に実行可能なオリジナルの保持について言及しました。基本的に、注文のステータスが変更されるたびに、メインテーブルを更新しますが、履歴テーブルで以前に表示されていたもののスナップショットを保持します。これにより、引用する古いバージョンの引用/注文をプルアップできます。

2
CalZ