库存数据库设计

时间:2009-03-24 02:35:20

标签: database-design

我找到了几个库存数据库的例子。但我正在寻找一些不同的东西。我正在使用SQL。

我需要跟踪工具。员工可以检查工具,并减少该工具的库存,并将该事务记录在(checked_out)表中。容易走远。

当员工返回工具或工具时,员工可以选择。他可以将工具退回库存。还算容易。或者他可以将工具打破并丢弃,换句话说,将其记录到垃圾桌。或者他可以将工具放入resharpen bin并将其记录到resharpen表中。这是我感到困惑的地方。

3 个答案:

答案 0 :(得分:7)

听起来您需要在库存表上显示状态。例如,任意工具的记录可以具有状态字段,该字段是“状态”表中的外键。状态表可能如下所示:

ID     Description
-----------------------
1      Available
2      In Use
3      Broken

......等等。

您的库存表可能如下所示:

id     status_id     description
-------------------------------------
1       2            Hammer
2       1            Hammer
3       3            Hammer
4       1            Saw
5       3            Saw

然后,在计算库存时,仅显示工具状态为“1”的记录。您还可以运行管理查询以显示有多少工具是“已损坏”。计划在正确计算损坏的工具后最终删除这些记录,或者将它们保留用于历史数据目的。

不惜一切代价,避免为数据库中任何实体的处置创建单独的表。使用“flag”字段(即status_id),这样就可以向应用程序添加新状态,而无需无限添加新表。

答案 1 :(得分:3)

您的设置错误,您不应该为垃圾签出 resharpen-bin 设置单独的表。这些只是表明可以找到工具。

你想要的是一个包含这两个表的数据库,这些表将容纳HardCode在his solution中提出的数据:

Inventory
-----
id (PK)
description
status_id (FK -> Statuses)

Statuses
----------
id (PK)

答案 2 :(得分:2)

我喜欢HardCode的架构,但它可能更接近于被建模以存储位置而不是状态的情况(在任何情况下我都不鼓励使用“status”这个词,因为它是如此通用的是无意义的)。位置实际上是在这里被跟踪的内容,甚至可以用于指示在签出时该项目的当前持有者。如果要跟踪它,我认为应该单独进行身体状况。这将允许基于工具用户反馈或员工观察的更精细等级的条件。

(回应评论2)

我希望您有一张表来记录工具的个别移动(在某个时间由人Z从位置A到位置B),另一个用于记录更高级别的摘要或当前位置。很大程度上取决于工具是否通过序列号单独识别,例如,在这种情况下,您可以单独跟踪它们,或者它们是否只是众多相同工具中的一种,而不是单独识别。这将决定您是否记录5个事务(每个工具一个)或5个工具的1个事务。您可能只是概括为“已检出的5个工具”,或者您可能会声明“这些工具当前位于这些位置”。