1

私がここで見つけた議論に基づいて:データベース:レコードを削除するかどうか、特に参照データに焦点を当て、それにいくつかの考えを追加し、一般的に、またはどの基準に基づいてあなたの好ましいアプローチを尋ねたいと思います利用可能なアプローチのどれを選択するかを決定します。

顧客向けの「リクエストデータベース」のデータ構造を次のように想定しますが、リクエストはさまざまなチャネル(電話、メール、ファックス、..;主に焦点を当てたい「参照データテーブル」)を介して配信される可能性があります。

Request (ID, Text, Channel_ID)
Channel(ID, Description)

最初に、これら2つのテーブル内の次のデータを想定しましょう。

リクエスト:

ID    | Text                                         | Channel_ID
===============================================================  
1     | How much is product A currently?             | 1 
2     | What about my inquiry from 2011/02/13?       | 1
3     | Did you receive my payment from 2011/03/04?  | 2

チャネル:

ID    | Description
===============================================================  
1     | Phone
2     | Mail
3     | Fax

したがって、次の要件を想定して、これをどのように攻撃しますか。

  1. チャネルは時間の経過とともに変化する可能性があります。つまり、説明が変わる可能性があります。新しいものを追加することができますが、特定のデータからのみ有効です。チャネルは(特定の日付までに)無効になる可能性があります

  2. レポートと監視の目的で、リクエストが最初に提出されたチャネルを使用して識別する必要がある可能性があります。

  3. 新しいリクエストの場合は、現在「有効な」チャネルのみを許可する必要がありますが、既存のリクエストの場合は、その特定の日付で有効だったチャネルも許可する必要があります。

私の理解では、それは明らかに、削除フラグを超えたより豊富な無効化アプローチ、おそらく参照データテーブルの「ValidFrom/ValidTo」アプローチを組み込んだものを求めています。

一方、これには、リクエストのデータキャプチャ中にいくつかの問題が伴います。これは、新しいリクエストの場合は現在使用可能なチャネルのみを表示するのに対し、既存のチャネルを維持するには、このレコードの作成時に使用可能なすべてのチャネルを表示する必要があるためです。表示されます。これは、開発の観点から複雑であるだけでなく、ユーザーにとって直感的でない場合もあります。

時間の経過とともに発生する可能性のある参照データのデータモデルを一般的にどのように設定しますか?では、どのようにユーザーインターフェイスを作成しますか?適切なデータベース設計のために、さらにどのパラメータを考慮しますか?

4

1 に答える 1

1

このような場合、私は通常、別のテーブルを作成します。たとえば、channel_versionsすべてのフィールドを複製しchannel、追加の列を持ちcreate_dateます(もちろんそれ自体のPKもあります)。channel新しい値をにコピーする挿入/更新トリガーの後に定義しますchannel_versions。これで、テーブルからのすべての要求Requestはからのレコードを参照しますchannel_versions。新しいリクエストの場合は、から最新バージョンのチャンネルを取得する必要がありますchannel_versions。古いリクエストの場合、リクエストが実行されたときにチャネルがどのように表示されたかを常に知っています。

于 2011-03-20T15:26:35.447 に答える