6

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

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

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

4

1 に答える 1

5

私は、時間的データと時間的多対多の関係の両方を使用するプロジェクトに取り組んでいます(ここ数年)。各テーブルには、ValidFrom列とValidUntil列があります(日付のみを保存します)。

まず、Valid *列のセマンティクス、つまりValidUntilが有効範囲に含まれるか除外されるかを定義する必要があります。また、NULLの日付が有効かどうか、およびその意味を指定する必要があります。

次に、dbo.Overlaps2()やdbo.Overlaps3()など、それぞれ2つと3つの日付範囲を受け取り、日付範囲が重複している場合は1を返し、そうでない場合は0を返す関数が必要です。

その上、dbo.Overlap3(...)=1を使用して多対多の関係のビューを定義しました。

もう1つのポイントは、2つまたは3つの関連テーブルの日付に基づいて有効な有効範囲を計算する一連の関数を用意することです。

最近、ユーザーが利用可能なすべてのデータ、または現在有効なデータのみを表示できるようにする機能を追加する必要がありました。この設定をusersテーブルに保存し、接続を開くときにSPIDをユーザーに関連付け、別のビューのセットでレコードをフィルター処理します。

于 2009-02-05T18:27:52.073 に答える