問題タブ [temporal-database]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
3688 参照

sql - T-SQL を使用して隣接するレコードのみを集計する

次のデータを含むテーブルがあります(例のために簡略化されています)

日付は期間を表し、ID はその期間中のシステムの状態であり、量はその状態に関連する値です。

私がやりたいのは、同じID 番号を持つ隣接する行の金額を集計することですが、連続した実行を組み合わせることができるように、全体的な順序は同じに保ちます。したがって、次のようなデータになりたいと思います。

SPに入れることができるT-SQLソリューションを求めていますが、単純なクエリでそれを行う方法がわかりません。何らかの反復が必要になるのではないかと思いますが、その道をたどりたくありません。

この集計を行う理由は、プロセスの次のステップで、シーケンス内で発生する一意の ID でグループ化された SUM() と Count() を実行して、最終的なデータが次のようになるようにするためです。

しかし、私が簡単なことをすると

元のテーブルでは、次のようなものが得られます

これは私が望むものではありません。

0 投票する
1 に答える
1530 参照

sql - SQL で一時的な多対多の関係をどのように作成しますか?

SQL で一時的な多対多の関係をどのように表現しますか? 非一時的な状況では、ジャンクション テーブル(別名リンク/ブリッジ/マップ) を使用して 2 つの側を接続します。

ジャンクション テーブルに ValidStart 列と ValidEnd 列を含めるだけで、一時的な追跡を簡単に追加できますか? これを行った場合、どのような問題に遭遇しましたか? この種の関係の経時変化を追跡するためのより良い方法はありますか?

それがまったく役立つ場合、私の場合、特にSQL 2008を使用しており、有効な時間のみを追跡しているため、一時データはバイテンポラルではありません。

0 投票する
11 に答える
33962 参照

database - テンポラル データベースが必要な理由

テンポラル データベースについて読んでいましたが、時間の側面が組み込まれているようです。なぜそのようなモデルが必要なのだろうか?

通常の RDBMS との違いは何ですか? 通常のデータベース、つまり RDBMS を使用して、発生する各トランザクションにタイムスタンプを関連付けるトリガーを使用することはできませんか? パフォーマンスが低下する可能性があります。しかし、テンポラル データベースが市場で確固たる地位を築いているかどうかについては、まだ懐疑的です。

現在のデータベースのいずれかがそのような機能をサポートしていますか?

0 投票する
2 に答える
327 参照

computer-science - テンポラル データベース モデリングのフィールディングは誰ですか?

Fielding と彼の論文に出くわす前に、REST についてあまり読む必要はありません。

リレーショナル ストアの範囲内でテンポラル モデリングに成功したことがある場合、その分野で言及したビッグ ネームは誰ですか?

0 投票する
4 に答える
1141 参照

sql - 時間とともに変化する人の情報を保持するデータベース設計?

スポーツセンターのメンバーシップを管理するために、サードパーティ製品を使用しています。いくつかのメンバーシップタイプ(例:ジュニア、学生、スタッフ、コミュニティ)といくつかのメンバーシップステータス(例:年次、アクティブ、非アクティブ、一時停止)があります。残念ながら、この製品はメンバーの現在のメンバーシップタイプとステータスのみを記録します。メンバーのタイプとステータスが時間の経過とともにどのように変化したかを追跡できるようにしたいと思います。

現在、製品のデータベース設計にアクセスできます。これはSQLServerで実行され、製品のテーブルに対して独自のSQLクエリを定期的に実行して、独自のテーブルを生成します。次に、テーブルをExcelのピボットテーブルにリンクして、グラフを作成します。したがって、私たちはデータベース設計とSQLに精通しています。しかし、私たちはこの問題に最善の方法で取り組む方法について立ち往生しています。

この製品は、メンバーのメンバーシップの購入と、その開始日と有効期限を記録します。そのため、そのデータをさかのぼって、任意の時点でメンバーのタイプとステータスを判別できます。たとえば、2007年1月1日にジュニアメンバーシップを購入し、2007年12月31日に有効期限が切れ、2008年6月1日に学生メンバーシップを購入した場合、ステータスがアクティブから非アクティブ、アクティブに変わったことがわかります(1月)それぞれ2008年1月1日と2008年6月1日)とそのタイプはジュニアから学生になりました(2008年6月1日)。

基本的に、メンバーのタイプとステータスのプロパティを一時的なプロパティまたは有効性a-la Fowler(または時間とともに変化するその他のもの)に変換したいと思います。

私たちの質問(最後に:)-上記のことを考えると、このメンバー情報を保持するためにどのデータベーステーブルの設計を使用することをお勧めしますか。MemberIDの列があるので、既存のMemberテーブルにキー入力できると思います。また、メンバーのステータスとタイプ、およびメンバーが保持されていた日付範囲を保存する必要があります。このテーブルに対してクエリを簡単に記述して、特定の時点での各タイプとステータスのメンバーの数を判断できるようにしたいと考えています。

更新2009-08-25:傍観されており、提案されたソリューションをまだ試す機会がありません。すぐにそうすることを望み、結果に基づいて答えを選択します。

0 投票する
3 に答える
2470 参照

database - テンポラル データベースのモデリングと正規化

テンポラル データベースの日付を 1 つまたは 2 つのテーブルに格納する必要がありますか? これが正規化に違反していない場合は?

DATE1 および DATE2 列は、INFO1 および INFO2 が DATE1 と DATE2 の間の期間に true であることを示します。DATE < TODAY の場合、ファクトは廃止され、ユーザー インターフェイスに表示されなくなりますが、歴史的な目的で削除されるべきではありません。たとえば、INFO11 と INFO21 は非推奨になりました。

このテーブルを分割する必要がありますか? 状態 (非推奨または現在) をテーブルに保存する必要がありますか?

質問をさらに明確にするために、非推奨はビジネスで使用される用語です。「最新ではない」ことを好む場合、問題はセマンティックではなく、SQLクエリについてでもありません。どの設計が違反しているか、正規化ルールに最適かを知りたいだけです(正規化が常に進むべき道ではないことは知っています。それも私の質問ではありません)。

0 投票する
2 に答える
817 参照

mysql - バージョン管理およびインデックス作成されたデータストア

エンティティのすべてのバージョンを簡単にインデックス付けされた方法で保存する必要があり、使用するシステムについて誰かが入力したかどうか疑問に思っていました。

バージョン管理を行わない場合、システムは、たとえば1人あたりの行を持つ単なるリレーショナルデータベースになります。人の状態が変化すると、その行はこれを反映するように変更されます。バージョン管理では、常に前のバージョンに戻ることができるように、エントリを更新する必要があります。時制データベースを使用できれば、これは無料で、「ダブリンに住んでいて30歳の昨日の午後2時の時点でのすべての人々の状態はどうなっているのか」を尋ねることができます。残念ながら、一時的に実行できる成熟したオープンソースプロジェクトはないようです。

これを行うための本当に厄介な方法は、状態の変化ごとに新しい行を挿入することです。人は多くのフィールドを持つことができますが、更新ごとに1つしか変更されないため、これは重複につながります。また、タイムスタンプが与えられたすべての人に正しいバージョンを選択するのは非常に時間がかかります。

理論的には、リレーショナルデータベースとバージョン管理システムを使用して時制データベースを模倣することは可能であるはずですが、これはかなり恐ろしいことのように聞こえます。

それで、誰かが以前に似たようなものに出くわしたことがあり、彼らがそれにどのようにアプローチしたのか疑問に思いましたか?

更新 Aaronによって提案されたように、これが現在使用しているクエリです(mysqlで)。20万行を超えるテーブルでは、間違いなく低速です。(id =テーブルキー、person_id = 1人あたりのID、その人に多くのリビジョンがある場合は複製)

p.id =の人pから名前を選択します(person_id = p.person_idおよびtimestamp<=:timestampの人からmax(id)を選択します)

更新 これを行うための最良の方法は時制データベースを使用することのように見えますが、オープンソースのものがないことを考えると、次善の方法は更新ごとに新しい行を格納することです。唯一の問題は、変更されていない列の重複と遅いクエリです。

0 投票する
1 に答える
513 参照

temporal-database - Oracle Workspace Managerは本番環境に対応していますか?

大規模なテンポラル データベースを実装するためのオプションを検討しています。数十億のレコードが一時的な変動を最小限に抑えて管理される可能性が高く、ウェアハウスに入力、更新、およびクエリを実行するアプリケーションに過度の責任を課すことを避けるために、ベンダーが実装したソリューションが必要です。

Oracle Workspace Manager は、私が検討しているソリューションの候補の 1 つですが、オンライン調査から、OWM は本番システムには実用的ではないという印象を受けました。特にTSQL2コンストラクトを使用して、テンポラルデータベースにOWMを使用した経験がある人はいますか?

どうもありがとう。

0 投票する
3 に答える
134 参照

algorithm - 一時的なグループメンバーシップの集計-それを行うための賢い方法はありますか?

私はウェブサイトを構築しています。ユーザーが参加できるグループがあります。

このグループと「通常の」グループの違いは、メンバーシップが一時的なものであるということです。ユーザーがグループに参加すると、メンバーシップの長さを5日、1週間、2週間などで決定します(選択肢は事前に定義されています)。または、すべてのメンバーシップを同じ長さに設定することもできます(たとえば、1週間)。

各グループのメンバー数を集計したいのですが。数値は、最後の1秒まで正確である必要はありません。ただし、古すぎることもありません。たとえば、1日1回更新する必要があります。

メンバーの数を計算する「明白な」方法は、毎日、たとえばcronジョブを実行し、すべてのグループのすべてのメンバーを1つずつ調べているようです。メンバーシップの有効期限が切れている場合は、そのメンバーをグループから削除し、グループのメンバーシップ数を1つ減らします。

そのアプローチは非常に非効率的で、あまりスケーラブルではないようです。グループの数が多いと、それは永遠にかかる可能性があります。

これを行うためのより良い方法を考えられますか?メンバーシップ数は、最新の秒まで正確である必要はありません。概算で(わずかに)古くなっている可能性があります。また、違いが生じる場合は、すべてのメンバーシップを同じ長さ、たとえば1週間に設定できます。

0 投票する
3 に答える
464 参照

database - 時間内にロールバックできる SQL データベースはありますか?

地理中心、関係中心などのように、完全に時間の概念に基づいたタイプの SQL データベースを探しています。

私の主な願いは、進行中にデータベースに変更を加えることができ、その後いつでも、基本的に、この日時にデータベースがどのように見えたかを示すクエリを実行できることです。ログテーブルを使用してすべてのトランザクションを記録するのではなく、SQL データベースにこの機能を組み込むことをお勧めします。

私はパイプの夢を望んでいますか?

ありがとう!

EDIT:さらに調査した結果、「一時的なデータベース」が私が探しているものかもしれません。したがって、それらの使用に関する情報、利用可能な優れたオープンソースのものがあれば、非常に役立ちます!