一部の同僚と私は、履歴データを保存するための最良の方法について議論しました。現在、一部のシステムでは、個別のテーブルを使用して履歴データを格納し、現在のアクティブなレコード用に元のテーブルを保持しています。それでは、テーブルFOOがあるとします。私のシステムでは、すべてのアクティブなレコードはFOOに入り、すべての履歴レコードはFOO_Histに入ります。ユーザーはFOOのさまざまなフィールドを更新できるため、更新されたすべての情報を正確に把握したいと考えています。FOO_Histは、自動インクリメントHIST_IDを除いて、FOOとまったく同じフィールドを保持します。FOOが更新されるたびに、次のようなFOO_Histへの挿入ステートメントを実行しますinsert into FOO_HIST select * from FOO where id = @id
。
私の同僚は、これは設計が悪いと言います。これは、履歴上の理由でテーブルの正確なコピーを用意する必要がなく、履歴用であることを示すフラグを付けて別のレコードをアクティブテーブルに挿入する必要があるためです。
履歴データストレージを処理するための標準はありますか?100万レコードをはるかに超える可能性があることを考えると、同じテーブル内のすべての履歴レコードでアクティブレコードを乱雑にしたくないようです(私は長期的に考えています)。
あなたまたはあなたの会社はこれをどのように扱いますか?
私はMS SQL Server 2008を使用していますが、回答を汎用的で任意のDBMSに限定したいと思います。