设计'简单'库存系统

时间:2010-01-08 04:01:10

标签: sql database-design rdbms database-agnostic

我想为本地计算机硬件非营利性建立一个关系数据库系统。我想知道如何实现两个相互关联的功能。首先,我们需要管理我们的零件库存,其次,我们需要跟踪计算机系统进入我们的捐赠,以及我们批准它们的时间。

首先,我们有一个简单的零件库存。我们不需要跟踪单个部分(我们不能,无论如何),所以我想要建模的是计数。我的想法是拥有不同的“箱子”部件,这只是一个简单的计数。因此,如果我们将视频卡从其“库存”箱移动到“回收”箱,我需要-1到视频卡库存,以及+1到视频卡回收。根据需要可以更好地定义垃圾箱,例如pci-video-cards,agp-video-cards等。或者,如果我们计算库存,我们可能需要从库存中做-3,并且+3到'收缩”。

关键是要随时知道我们拥有多少视频卡,有多少只公羊棒等等。一个垃圾箱的两个方面就是它中的任何一个部分(在任何级别)特殊性,例如'old-misc-card'或'32MB-3.3v-agp-video'),以及bin的目的,例如'捐赠','库存','回收','商店','收缩'等。

此外,我们希望看到零件的潮起潮落和历史数据的趋势,因此我们需要随时对库存进行查询。

那么我如何设计表来处理呢?我认为它会像双重分类帐一样。我可能有一个名为'BinTransactions'的表,其中有from_bin,to_bin和amount。数量将是一个正整数,如果我想写一个查询,看看将从库存中取出多少,我会把它作为负数。类似“SELECT SUM(金额)* -1来自BinTransactions WHERE from_bin ='inventory'AND time_period = ...”?

第二部分是计算机系统本身。他们以他们所处的任何州的形式进行捐赠。可以从他们那里取出零件并将其存入库存或回收;零件可以从库存中取出并放入计算机中。我想我可以制作一台电脑

计算机最终作为一种授权从我们的系统中脱颖而出,但这种结构有一层嵌套。它是计算机中的计算机部件的集合,但也有监视器,键盘,鼠标,也许是扬声器。大额赠款可能是几个系统,也有网络设备。应该“嵌套”分组的逻辑层次结构(部分进入计算机,计算机进行授权),还是只需要每一次捐赠只需一大部分就可以了?如果它是一大部分组件,如果我们从授权中获得一台计算机,则不一定知道哪些部件与哪台计算机一起使用。此外,我们希望能够从报告中了解到“本季度共有34个完整系统捐赠......”

2 个答案:

答案 0 :(得分:1)

这听起来像是一个已经解决的问题: http://sourceforge.net/projects/phpmyinventory/ http://sourceforge.net/projects/asset-tracker/ 这些只是我在sourceforge上找到的两个链接,方法是在搜索框中输入“inventory”。

最基本的描述是:

  • 电脑零件进来。
  • 存储计算机部件。
  • 电脑零件离开。

我对SQL不够强大,无法推荐一种方法来处理计算机捐赠/销售及其部分故障 - 我可能会让一些外部应用程序处理大部分逻辑,并跟踪这一点:

  • 谁捐赠了一台电脑
  • 给谁一台电脑

就逻辑处理而言:例如,一个网页上写着:“哇!我们收到了一台电脑!它有:

  1. 电源?
  2. 视频卡?
  3. 声卡?
  4. 等等,等等。“
  5. 当计算机离开时也可以这样做 - 但是你需要从存储器中移除'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 :(得分:1)

对于计算机是一组零件位,我们在LedgerSMB中跟踪装配的方式是:

我们有一个零件表,每个零件都有一个装配标志。

我们有一个汇编表,它提供了零件和其他零件之间的分层映射。可以使用其他装配,零件和人工构建装配体。