0

これは特定の技術的な問題に関する質問ではなく、データベース設計に関する一般的な質問です。それにもかかわらず、技術スタックは、ASP.NET MVC、SQL DB です。

私は最近、注文-->注文アイテム-->製品コンセプトを持つシステムを継承しました。つまり、注文には多くの注文アイテムがあり、各注文アイテムは1つの製品に関連付けられています。

Order Item は、DB に保存されるときに以下を格納します。

  • オーダーID
  • 製品番号
  • 数量
  • 単価 (製品から書き込まれる)
  • NET 合計 (数量 * 単価に基づいて計算)
  • バット
  • 総収入

UI から表示される注文アイテムは次のようになります。

Qty | ProdCode | ProdDescription | Unit Cost | Total NET | VAT | Total Gross

数量、単価、合計はすべて注文項目から UI に取り込まれ、製品コードと製品の説明は関連する製品レコードから取り出されます。

すべてが十分に賢明に思えます。

したがって、私の質問は、製品からどのデータを書き込む必要があるか、製品からどのデータを参照する必要があるかを中心に展開しています。特に、Unit Cost は、Order Item が作成されたときに Product から書き込まれます。これは、製品の価格が変更され、この変更を古い注文に適用したくないためだと思います。わかりました、理にかなっています。

私の質問は、同じロジックが製品コードと製品説明にも適用されるべきですか? もしそうでなければ、なぜですか?

私の考えでは、製品コードと説明も注文アイテムに書き込まれる必要があるようです。つまり、製品コードと説明は、製品単価と同じくらい変更される可能性があります。その場合、戻って古い注文を確認すると、注文の製品コードと説明が最初に注文したものと異なっているように見えますが、これは間違っているように思えます。

システムを構築した開発者は、システムを設計したときの考えを話し合うことができなくなりました。

システムは正常に機能しており、苦情はありません。ただし、これは主に、さまざまなユーザーが編集できるにもかかわらず、製品コード/説明が更新されていないためです。

大規模な変更を行う前に、人々の考えを聞きたいと思います.これは一般的なシナリオであり、私は何も心配していませんか?

4

1 に答える 1

1

このような場合、考慮すべきいくつかの側面があります。注文は不変でなければならないという事実から始めましょう。

製品コードと説明は不変ではないため、一見すると、これらを orders テーブルに保持することは理にかなっているように見えます。
ただし、これにより、各注文の各製品について、大量の重複データが発生する可能性があります。

もう 1 つのアプローチは、製品コードと説明を不変にしないことです。

もう 1 つの方法は、管理者が製品コードと説明を編集できるようにすることですが、製品テーブルの行を更新する代わりに、単純に履歴としてマークし (もちろん、そのためにステータス列を追加する必要があります)、新しいその製品の行に、新しいコードと説明を入力します。
このソリューションを使用すると、注文の整合性を維持しながら、管理者ユーザーが必要に応じて編集できるようになり、特に製品コードまたは説明への変更があなたが書いたほどまばらな場合に、最小限のデータを維持できます.

于 2016-02-04T17:47:44.910 に答える