2009-06-18 27 views
2

有効な開始日と終了日に基づいてレコードが有効で無効となるデータセットで作業した経験がある人はいますか?問題は、これらのテーブルのレコードが、有効な開始日と終了日を持つ他のテーブルへの外部キーを持っている場合です。データベースレコード - 有効な開始日と終了日と外部キー

ヒストリを維持しながら。

例:

---ペット---
犬という名前の碧玉、所有者は、1月からジャックは - > 6月と6月からケンを販売している - >時間

---所有者の終わり---
ジャンク - >ファブからハウスBに住み、その後febからハウスB - >時間の終了
ケンはfeb - > september、ハウスDからsept - >終わりまで

ジャスパーの報告が6月にある場合、オーナーはHoに住むジャックになりますBを使用します。septemberに同じクエリを実行すると、House DのKenになります。

この関係をモデル化するにはどうすればよいでしょうか?そして、適切な関係を維持するためにデータに「更新」を実行する方法は?

答えて

4

このような問題のために使用しているアプローチは、同じテーブル内の要素の所有権をタイムラインを含むマッピングテーブルに保持しないことです。

Table DOGS 
- ID 
- NAME 

Table OWNER 
- ID 
- NAME 

Table LOCATION 
- ID 
- HOUSE_NAME 

Table DOGS_OWNERSHIP: 
- DOG_ID (FK->DOGS.ID) 
- OWNER_ID (FK->OWNER.ID) 
- START_TIME 
- END_TIME 

Table OWNER_LOCATION 
- OWNER_ID (FK->OWNER.ID) 
- LOCATION_ID (FK->LOCATION.ID) 
- START_TIME 
- END_TIME 

このようにして、所有権、場所、それぞれのタイムラインを完全に2つのテーブルで管理できます。

所有権または場所が変更された場合、それぞれのタイムラインテーブルの現在の所有権/場所のEND_TIMEを更新し、現在の時刻と新しい終了時刻(終了時刻)から始まる新しいエントリを追加します。 。

また、いくつかの制約を追加して、重複するマッピングがないことを確認したいと思っていますが、これはビジネスロジックと環境設定に依存します。

1

"有効な開始日と終了日に基づいてレコードが有効かつ無効になるデータセットで作業した経験がありますか?"

はい私は(しかし、それはほぼ15年前です)。

良いニュース:あなたの問題(時間的データを管理することです)は解決できます。

悪いニュース:あなたの問題は、現在存在するSQLシステムでは解決できず、将来的に存在するSQLシステムでは解決できそうにもありません。

問題の根本的な扱いとして、Lorentzos、Darwen、Dateの「時間的データと関係モデル」を読むことをお勧めします。

アイデアのプロトタイプ実装については、SIRA_PRISEをお勧めします。

関連する問題