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

また、パーツごとに3つの個別のパーツテーブルがあります。

     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を含むロケーションテーブルが必要です。

質問自体への答えに関する限り。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 に答える