多くのデータベースと同様に、各テーブルで変更された行の以前のバージョンを記録するデータベースを設計しています。
この問題の標準的な解決策は、データ テーブルごとに履歴テーブルを保持することです。データ テーブルで行を更新する必要がある場合は常に、現在の行のコピーが履歴テーブルに挿入され、データ テーブルの行よりも優先されます。更新されます。
私にとってこのソリューションの欠点:
- 1 つではなく 2 つのテーブルのメンテナンス (テーブルの構造を変更する必要がある場合)
- アプリケーションは、一方ではなく両方のテーブルを認識する必要があります
- テーブル名と履歴テーブル名の規則を維持するために、テーブルの名前を短くする必要がある場合があります (たとえば、SOME_TABLE、SOME_TABLE_HIST)。
私は別の解決策を検討していて、それが大丈夫かどうか知りたい. テーブルごとに、列 IS_LAST を追加します
- 行がテーブルに挿入されると、IS_LAST=1 で挿入されます。
- 行が更新されると、元の行のコピーが同じテーブルに複製され、IS_LAST=0 が変更され、元の行が必要に応じて更新されます (IS_LAST=1 のまま)。
私の場合、行は平均 10 回更新されると仮定します。また、アプリケーションによって実行されるアクションの少なくとも 90% は、行の最新バージョンでのみ発生すると想定します。
私のデータベースは Oracle 10g なので、「アクティブな」テーブルをスリムに保つために、テーブルを 2 つのパーティション (IS_LAST=1 パーティションと IS_LAST=0 パーティション) に分割できます。
パーティショニングは履歴データ保持の問題を解決する良い方法ですか?
このソリューションは、他のパーティションの可能性をこれらのテーブルに制限しますか?
ありがとう!