質問: 過去データに対するデータベースのクエリの実行の仕方 こんにちは。アべです。 データの処理でリレーショナルデータベースを使用しようとしております。 そこで、台帳(例えば顧客台帳)をマスタ登録して使用するのですが、 下記のことがクエリでは出来ずに困っています。 やり方のヒントでもよろしいので教えていただけないでしょうか? ・過去に戻って、トランザクション処理を再実行する際に過去の その時点の台帳情報を引っ張りたい。 (テーブルに時間指定でクエリを投げる方法がわからない。) ・その台帳の情報を確認したい。 (単純に台帳の過去を知りたい。 トリガで更新処理のログを残す手間なやり方しか思い浮かばない。) 本をみてもリレーショナルデータベースに時間軸の概念がないような 気がしております。 (一応調べて見て、スナップショットデータベースがあり、これだと ある特定の時点しか取れず、しかも事前に用意しておかなければならず、 いまいち今回のパターンだと使えないと考えています。) 環境 sql server 2008 service pack 1 宜しくお願い致します。
回答: >rdbにやはり時間軸を持たせる概念はないのですね。 sql server 2008をお使いということなので、参考までにコメントしますが、 最新版のrdmsでは、質問者さんのいう時系列の概念を導入する試みが行われています。 先に対応したのはoracleで、11gでflashback data archive(total recall)という機能が追加され、オブジェクトを特定して長期間の更新履歴を保持することが可能になりました。 それを意識してか、sql server 2008でも変更データキャプチャ(cdc)という機能が追加されています。 特定のテーブルに関して自動的に更新履歴が記録されていきますが、トリガによるログ記録との違いは以下の通りです。 ・sql serverの機能として履歴の記録がサポートされている点 ・トリガではなく、トランザクションログから記録される点(トリガは無効にしてしまえば動きませんが、cdcはエージェントが起動している間記録され、エージェントを停止しても再開したときにまとめて記録されます) ・履歴データを検索する関数がいくつか提供されている点 sql server 2008 enterpriseをお使いならば、使ってみてもいいかと思いますが、個人的には積極的にお勧めするものではありません。 以下の点の通り、まだ監査用の意味合いの方が強いためです。次バージョン(kilimanjaro)で、もう少し使いやすくなってくれるといいと思いますが。。 ・oracleのflashback data archiveは、as of句のサポートにより、過去の特定時点のデータの検索が抵抗なく行えますが、 sql serverのcdcは「特定期間の変更内容」を検索する機能があっても、「過去の特定時点のデータ」を検索するする機能は提供されていないため、ラッパー関数を自作する必要があります。