下の図では、私がやろうとしていることの単純化されたバージョンを見ることができます。特定のアイテムの場所を追跡する必要がありますが、特定のアイテムの最新の場所を効率的に取得する必要もあります。これを行う最も簡単な方法は、ItemLocationLog にクエリを実行し、そのアイテムの最新の日付を検索することですが、このテーブルは非常に大きくなる可能性があるため、これが効率的かどうか疑問に思っています (dateTime フィールドのインデックス作成が役立つと思います)。 、しかし、どのくらいかを判断する経験がありません)。
私が考えたもう 1 つの方法は、Item にログ テーブルの外部キーを追加することです (「lastLocation」フィールドの図に示されているように)。これは常に最新のログ エントリを指すため、検索の手間が省けます。 . さらに別のオプションとして、Item の Location に外部キーを追加し、任意のアイテムにログ エントリが追加されるたびにそれを更新する方法があります。
これは単純な解決策でよくある問題だと確信していますが、私はこれを経験したことがないので、自分のアプローチには懐疑的です。このタイプのシナリオのベスト プラクティスは何ですか? コストのかかるクエリを回避するために Item テーブルへの参照を追加しても問題ありませんか、それとも、ログ テーブル自体からこの情報を取得するだけの簡単なクエリですか?