こんにちは。アべです。
データの処理でリレーショナルデータベースを使用しようとしております。
そこで、台帳(例えば顧客台帳)をマスタ登録して使用するのですが、
下記のことがクエリでは出来ずに困っています。
やり方のヒントでもよろしいので教えていただけないでしょうか?
・過去に戻って、トランザクション処理を再実行する際に過去の
その時点の台帳情報を引っ張りたい。
(テーブルに時間指定でクエリを投げる方法がわからない。)
・その台帳の情報を確認したい。
(単純に台帳の過去を知りたい。
トリガで更新処理のログを残す手間なやり方しか思い浮かばない。)
本をみてもリレーショナルデータベースに時間軸の概念がないような
気がしております。
(一応調べて見て、スナップショットデータベースがあり、これだと
ある特定の時点しか取れず、しかも事前に用意しておかなければならず、
いまいち今回のパターンだと使えないと考えています。)
環境
SQL Server 2008 Service Pack 1
宜しくお願い致します。
No.3
- 回答日時:
「時間軸の概念」が無くてもご希望のことはできそうに思います。
例えば在庫数を「在庫数データ」として持ち、それが変動してしまうと「時間軸の概念」が必要になりますが「総入庫数」-「総出庫数」として求め「入庫記録テーブル」「出庫記録テーブル」のフィールドを
品物ID
個数
入出庫日時
とすれば、ある品物に対し、ある時点での個数を計算できます。棚卸しも、ある種の入出庫と考えて処理すれば良さそうです。
>1.トリガで情報を残し、その情報をアクセスします。
>2.一連のトランザクション群を逆算処理してその時点の情報を採取する
このように難しいことをする必要が、本当にあるのでしょうか?
No.2
- 回答日時:
>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は「特定期間の変更内容」を検索する機能があっても、「過去の特定時点のデータ」を検索するする機能は提供されていないため、ラッパー関数を自作する必要があります。
No.1ベストアンサー
- 回答日時:
リレーショナルデータベースの正式な理論でどうなっているのかは知らないのですが、自分の知っている範囲では"基本的"に時間軸の概念は無いと思います。
よく比較されるのが、Googleのビッグテーブルには時間軸があると聞きます。基本的にを強調した理由は、機能としては過去履歴をデータとしては保持してません。(誤解を生みそうなので補足すると、バックアップ、データ整合性保持機構として、ログに記録されます。でも随時参照用ではありません)
過去に同様の事をするために、プログラムで過去履歴を残すように実装しました。
・マスターは上書きせず、更新する場合にも新規Insertして別IDとする
・帳票を作成したときのデータをリレーションキーで保持せず生データで保持する
などのように、DB設計などで対応しました。
作り込んでの対応ですね。
norayuniさん、
早速の回答を有難うございます。
RDBにやはり時間軸を持たせる概念はないのですね。
残念です。私も自前での実装で試みます。
データベース自体が現実世界に合わせる際にどうしても
タイムラグがあるので、多少の過去に戻って過去の処理を
かけたかったのですが、ここは自前で実装することにします。
補足
1)やりたかったのは、例えば
お店で営業中に棚卸をして刻々と変る在庫数とある時点の
在庫数で帳簿(論理)在庫の数を調整するなどを実施したかったです。
販売管理だと24時間対応や日中棚卸などはコスト削減で当たり前なので
また、障害により、トランザクション処理を再投入する際に
台帳がトランザクション発生時点でひけないと2度目の処理結果が変る。
(でも、台帳の更新も一連のトランザクション群に入れてしまえば
全てリランできるともいえる。)
2)自前の時間軸の対応について
過去を索引する方法は、
1.トリガで情報を残し、その情報をアクセスします。
2.一連のトランザクション群を逆算処理してその時点の情報を採取する
があるかと思います。なんとなく1がシンプルかと思っています。
以上 有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Windows 7 徒然日記がバージョンアップしたら 1 2023/08/27 07:02
- MySQL 【投稿情報用データベース posts】は必要ないと思います。 1 2022/06/02 21:25
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- 医師・看護師・助産師 【現役医師に質問です】厚生労働省からお薬手帳が配布されていて、どこの医者に掛かって 2 2022/10/14 20:06
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- 財務・会計・経理 事業復活支援金の事前確認について 2 2022/04/11 16:07
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- その他(開発・運用・管理) おんどとりWebStorage APIから温度情報を取得し表示したい 2 2023/08/03 09:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
業務用のデータベースサーバー...
-
MS-Accessのエクスポートで異常...
-
ACCESSのデータをWebブラウザで...
-
1回目の実行に3分、2回目の実行...
-
ACCESSのクエリからORACLEのDB...
-
DB2 双方向でのレプリケーショ...
-
accessの上限容量2Gでは容量が...
-
oracleデータベースの更新履歴
-
SQLServerのDBのうちテーブルを...
-
AccessのLANでの共有
-
データのロードの仕方
-
【DB】同じトランザクション内...
-
警察はスマホに保存した動画や...
-
postgresql についてです
-
復旧中のデータベースについて
-
tempdb の適切なサイズ
-
ADO Connection を再利用する方法
-
SQL Server Management Studio ...
-
DATファイルをEXCELで開きたい
-
TPSとは・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのデータをWebブラウザで...
-
MS-Accessのエクスポートで異常...
-
1回目の実行に3分、2回目の実行...
-
Sqliteで使えない文字。
-
accessの上限容量2Gでは容量が...
-
ACOSのRDBについて教え...
-
業務用のデータベースサーバー...
-
ACCESS2010 Excelエクスポート ...
-
ACCESSのクエリからORACLEのDB...
-
ツリー情報のデータをSQLで取得...
-
SQLServerのDBのうちテーブルを...
-
SQL ServerにExcelをリンクさせ...
-
oracleデータベースの更新履歴
-
データファイルに書き込まれる...
-
AccessのLANでの共有
-
別サーバーへのデータの同期更...
-
SQLSERVERのテーブルにデータを...
-
暗号化したDBのデータ移行
-
SQL文で、重複データの上書きは...
-
AccessのクエリとExcelの外部デ...
おすすめ情報