1


1

「シンプルな」在庫システムの設計

ローカルコンピューターハードウェアのリレーショナルデータベースシステムを非営利にしたい。 実装方法を把握したい、相互に関連する2つの機能があります。 まず、部品の在庫を管理する必要があります。次に、コンピューターシステムの寄付を受け取ったときに追跡する必要があります。

まず、単純な部品の在庫があります。 個々の部品を追跡する必要はありません(とにかくできませんでした)。したがって、モデル化するのはカウントです。 私の考えは、単純な数だけの異なる部品の「ビン」を持つことです。 そのため、ビデオカードを「在庫」ビンから「リサイクル」ビンに移動する場合、ビデオカードインベントリに-1、ビデオカードリサイクルに+1が必要です。 pci-video-cards、agp-video-cardsなど、ビンは必要に応じてより明確に定義できます。 または、在庫をカウントする場合、在庫から-3、「縮小」まで+3が必要になる場合があります。

そのポイントは、たとえばビデオカードの数、ラムの棒の数などをいつでも知ることです。 ビンの2つの側面は、その中にどのような種類の部品があるか(「old-misc-card」や「32MB-3.3v-agp-video」などの特定のレベルで)、およびビンの目的です。 、「寄付」、「在庫」、「リサイクル」、「店舗」、「収縮」など。

また、部品の増減のトレンド、および履歴データを確認したいので、いつでも在庫のクエリを実行する必要があります。

それで、それを処理するテーブルをどのように設計しますか? 複式台帳のようなものになると思います。 from_bin、to_bin、およびamountがある「BinTransactions」というテーブルが1つある場合があります。 量は正の整数になります。在庫からどのくらいの金額が取り出されるかをクエリで記述したい場合は、マイナスにします。 「SELECT SUM(amount)* -1 FROM BinTransactions WHERE from_bin = 'inventory' AND time_period = …​」のようなものですか?

これの2番目の部分は、コンピューターシステム自体です。 彼らはどのような状態にあるとしても寄付としてやって来ます。 それらから部品を取り出して、在庫またはリサイクルに入れることができます。部品を在庫から取り出してコンピューターに入れることができます。 私はコンピュータを作ることができると思います

コンピューターは最終的に私たちのシステムから助成金として出て行きますが、その構造には一種のネストがあります。 コンピューター内のコンピューター部品のコレクションですが、モニター、キーボード、マウス、おそらくスピーカーもあります。 また、大規模な助成金には、ネットワーク機器を備えた複数のシステムが含まれる場合があります。 グループ化の論理的階層(コンピューターへの部分、助成金へのコンピューター)の論理階層を「ネスト」する必要がありますか? 部品の1つの大きなグループである場合、助成金から1台のコンピューターを取り戻しても、どの部品がどのコンピューターに使用されているかは必ずしもわかりません。 また、レポートから「この四半期に34の完全なシステムが寄付されました…​」ということを知りたいと思います。

2 Answer


1


これはすでに解決されている問題のように聞こえます:http://sourceforge.net/projects/phpmyinventory/ http://sourceforge.net/projects/asset-tracker/これらは、「inventory」と入力してsourceforgeで見つけた2つのリンクです。 '検索ボックスに。

最も基本的な説明は次のとおりです。

  • コンピューターの部品が入ります。

  • コンピューターの部品が保管されます。

  • コンピューターの部品はそのままです。

私はSQLでコンピュータの寄付/販売およびそれらの部品への分解を処理する方法を推奨するほど強くはありません-私はおそらく外部のアプリケーションにそのロジックのほとんどを処理させ、これを追跡します:

  • コンピューターを寄付した人

  • コンピュータは誰に与えられましたか

ロジック処理に関しては、たとえば、「Woo! コンピューターを受け取りました! 持っているもの:

  1. 電源?

  2. ビデオカード?

  3. サウンドカード?

  4. などなど。」

コンピューターを配るときにも同じことができますが、離れる部品ごとにストレージから「1」を削除する必要があります!

では、在庫をどのように処理しますか? さて、次のようなテーブルを1つ作成できます。

video card   | recycle | donation-in | storage | garbage
sound card   | recycle | donation-in | storage | garbage
power supply | recycle | donation-in | storage | garbage

各ビンは、ある時点でいくつあるかです。 より具体的にしたい場合は、「説明」列を追加して、たとえば、各タイプのビデオカードの数を把握できます。

そして、このようなテーブル:

part name | from_bin | to_bin | quantity

量を移動するためのロジックのほとんどは、おそらくアプリケーションで処理する必要があります(私はRuby-on-Railsの方なので、これは理にかなっています)。 お役に立てば幸いです。


1


コンピューターはパーツビットのセットであるため、LedgerSMBでアセンブリを追跡する方法は次のとおりです。

パーツテーブルがあり、各パーツにはアセンブリフラグがあります。

パーツと他のパーツ間の階層マッピングを提供するアセンブリテーブルがあります。 アセンブリは、他のアセンブリ、部品、および労働力から構築できます。