库存系统 - 跟踪零件状态和位置的正确方法

时间:2012-07-20 20:20:46

标签: php mysql inventory

如果我有一个名为group的表:

[Part_one_id|Part_two_id|Part_three_id|status|location]
     1            7           6        ready     long/lat
     2            2           9        in-use    long/lat

每个部分都有三个独立的零件表:

     Part one                     Part two                   Part three
[id][measurement]             [id][pressure]               [id][temperature]

我应该以哪种方式跟踪位置和状态?

  1. 任何时候组的状态更新,运行另一个查询以更新自己的表中的部件的状态和位置
  2. 如果我需要找出某个位置,我会查看它所在的群组并提取当前位置

1 个答案:

答案 0 :(得分:1)

我看到你的桌面结构有一些重大问题。

  1. 你永远不应该有一个像下面这样的表:part1_id,part2_id,...因为如果你想要添加比原始设计更多的部分,你需要添加列,使用大表这是不可解决的。而是使用与连接表的多对多关系。
  2. 您应该审核位置,以便快照任何给定时间点的位置。这意味着您应该拥有一个包含part_id,location_id,创建,修改的审计表以及具有lat / long的位置表。
  3. 至于问题本身的答案。我并不特别喜欢MySQL触发器,因为语法不是那么好,而且它们没有像PostgreSQL或Oracle等其他数据库那样多。话虽这么说,在这个例子中关于触发器的吸引人的事情是触发器将在与触发它的更新/插入相同的事务中执行,因此您将免费获得该业务规则。但是,根据您用于访问数据库的内容,您可以启动事务,而不是在完成审计插入之后结束事务。

    最终你的表格会改变为:

    group:id,name,created,modified,status

    part_group:part_id,group_id,created,modified

    location:id,lat,long

    group_location:group_id,location_id,created,modified

    然后,最近创建的group_location将指向您给定组的当前位置。