13

追加情報を追加するために e コマース システムに変更を加える必要があり、この機会に改善を加えてより柔軟にしたいと考えました。顧客が注文すると、注文された各アイテムとともにいくつかの情報アイテムを保存する必要があります。たとえば、商品価格、配送料、徴収された税金、行われた調整などです。

次のように、これらのフィールドを個別に保存する必要があるかどうかを議論しています (単純化された例):

ORDER_LINE_ITEM
    OrderLineItemID
    ProductID
    Qty
    Price
    Shipping
    Handling      
    SalesTax
    Adjustment

たとえば、顧客が支払った合計金額を計算できます。

SELECT Qty*(Price+Shipping+Handling+SalesTax) As TotalCollected FROM ORDER_LINE_ITEM

または、より間接的な構造を使用する必要がある場合:

ORDER_LINE_ITEM
    OrderLineItemID
    ProductID
    Qty

ORDER_LINE_ITEM_ENTRIES
    OrderLineItemEntryID
    OrderLineItemID
    EntryType
    Value

例えば:

1 | 1 | Price      | $10
2 | 1 | Shipping   | $5
3 | 1 | Handling   | $1
4 | 1 | SalesTax   | $1
5 | 1 | Adjustment | -$3.50

これの利点は、後でテーブル スキーマを変更せずに追加情報を保存できることです。ただし、情報の取得とレポートの実行は、より複雑で遅くなります。

この情報を注文/請求データベースに保存するためのベスト プラクティスはありますか?

前もって感謝します、

ダン

4

3 に答える 3

9

Database Answers で、一般的な問題に対するかなり標準的なデータベース設計をいくつか見つけることができます。 データモデルのページについては、 ここをクリックしてください。

請求に関係するいくつかのサンプル モデルがあります。

于 2012-07-21T15:07:10.070 に答える
1

私は両方を持って、混合アプローチを行います:

ORDER_LINE_ITEM
    OrderLineItemID
    ProductID
    Qty
    Price
    Shipping
    Handling      
    SalesTax
    Adjustment
    Extras

ORDER_LINE_ITEM_ENTRIES
    OrderLineItemEntryID
    OrderLineItemID
    EntryType
    Value    

そして、やって

SELECT Qty*(Price+Shipping+Handling+SalesTax+Extras) As TotalCollected FROM ORDER_LINE_ITEM

その後、ほとんどの場合、単一のテーブルで作業できますが、アイテムの詳細を検索する (または価格に影響する新しいものを追加する) 必要がある場合は、それを行うことができます (extra フィールドを使用)。

別のトピックでは、これらすべてのフィールドが本当に ORDER_LINE_ITEM にある必要があるかどうかを検討します。私はあなたのビジネスを知りませんが、私が知っているものでは、配送、取り扱い、さらには価格も、1 つのアイテムだけでなく、注文全体で計算されます (また、別々のアイテムに分割することが常に可能であるとは限りません)。また、「管理者」ユーザーまたはパスワードを持っていることもよくあることです。彼らは何でも好きなものを売りに来て、あらゆるものに任意のフィールドを入力し、すべての通常のビジネス ルールを無視します。したがって、次のようなことを検討できます。

ORDER_LINE_ITEM
    OrderLineItemID
    OrderId
    ProductID
    Qty

ORDER
    OrderId
    ItemsTotalPrice
    Shipping
    Handling
    SalesTaxes
    Adjusment
    FinalPrince

詳細テーブルを作成して、注文の値 (税金、送料など) がどのように作成されたかを指定できます...

一般に、最善のアプローチは、すべての注文 (または操作) の最終情報を持つエンティティを作成し、次に「合計」値の計算方法を指定する追加のサブエンティティを作成することです。

于 2012-07-21T03:53:31.483 に答える
0

概念的には、2番目のアプローチの方が優れています。注文情報は商品に直接属していないため、商品は「配送」や「taxex」なしで存在する可能性があります。さらに、このように保存するデータが少なくてすむため、商品情報を繰り返す必要はありません。

ORDERITEM
    OrderItemID
    ProductID
    Qty

ORDERITEMENTRIES
    OrderItemID
    EntryType
    Value
于 2012-07-21T00:59:48.040 に答える