1

如果我有一个名为 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. 如果我需要找出某个位置在哪里,我会查看它所在的组并提取当前位置
4

1 回答 1

1

我发现您的表结构存在一些大问题。

  1. 你永远不应该有这样的表:part1_id,part2_id,... 因为如果你想在一行中添加比原始设计更多的部分,你需要添加列,对于一个大表,这是难以处理的。而是使用连接表的多对多关系。
  2. 您可能应该审核位置,以便在任何给定时间点获得位置的快照。这意味着您应该有一个具有 part_id、location_id、created、modified 的审计表和一个具有 lat/long 的 location 表。

至于问题本身的答案。我不是特别喜欢 MySQL 触发器,因为语法不是很好,而且它们的功能不如 PostgreSQL 或 Oracle 等其他数据库中的那么多。话虽如此,在这种情况下,触发器的吸引力在于触发器将在与触发它的更新/插入相同的事务中执行,因此您将免费获得该业务规则。但是,根据您用于访问数据库的内容,您可以只启动一个事务,在完成审计插入之前不要结束它。

最终,您的表格将变为:

组:id、名称、创建、修改、状态

part_group:part_id、group_id、创建、修改

位置:id、lat、long

group_location:group_id,location_id,创建,修改

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

于 2012-07-20T20:31:34.580 回答