1. ホーム
  2. database

インベントリデータベース設計【終了しました

2023-09-16 06:52:24

質問

これはプログラミングに関する質問ではなく(どの言語やデータベースにも特化したものではありません)、よりデザインとアーキテクチャに関する質問です。これはまた、Xを行うための最良の方法は何かというタイプの質問でもあります。宗教的な論争が起きないことを祈ります。

過去に私は、何らかの方法で、アイテム (どのアイテムかは関係ありません) の何らかの形式のインベントリを保持するシステムを開発しました。トランザクションをサポートしない言語/データベースを使用したものもあります。そのような場合、私はアイテムを保存しないことを選択しました。 手持ちの数量 を項目レコードのフィールドに保存しないことにしました。その代わりに 手持ちの数量 は、入荷した在庫の合計-販売した在庫の合計で計算されます。これにより、ソフトウェアが原因で在庫に齟齬が生じることはほとんどなくなりました。テーブルには適切にインデックスが付けられ、パフォーマンスも良好です。レコードの量が増えてパフォーマンスに影響が出始めた場合に備えて、アーカイブ処理も行っています。

さて、数年前、私はこの会社で働き始め、在庫を追跡するシステムを受け継ぎました。しかし、数量はフィールドに保存されています。エントリが登録されると、受け取った数量は、アイテムの数量フィールドに追加されます。商品が売れると、その数量が差し引かれます。このため、齟齬が生じています。私の意見では、これは正しいアプローチではありませんが、ここの前のプログラマーはこれを誓っています。

私は、そのようなシステムを設計する正しい方法についてのコンセンサスがあるかどうかを知りたいのです。また、これに関するガイダンスを求めるために、印刷物やオンラインでどのようなリソースが利用可能かについても教えてください。

ありがとうございます。

どのように解決するのですか?

私は現在の会社で両方のアプローチを見たことがありますが、間違いなく前者(株式取引に基づいて合計を計算する)に傾くと思います。

どこかのフィールドに合計数量を保存しているだけでは、その数字にどのようにたどり着いたのかがわかりません。取引履歴がなく、問題が発生する可能性があります。

私が書いた最後のシステムは、各取引を正または負の数量を持つレコードとして格納することによって、在庫を追跡します。これは非常によく機能することがわかりました。