興味深い問題が発生しました。私は、リモートの組み込みシステムからのレポートをポーリングして受け入れるデーモンプロセス用のデータベースを継承しました。これらのシステムの1つを持つ各サイトは、12種類の異なる燃料タンクを監視できます。 (実際にはほとんどの2,3または4つのタンクを監視しています)名前を変更するオブジェクトを追跡するためのモデル
タンクが補充されたり、タンクが最低レベルに達したときなどに、プログラムはそのイベントをPostgresデータベースに保存しました。データベースが元々構築された方法では、別の「タンク」テーブルがあったとしても、イベント記録に各燃料タンクの情報(燃料の種類など)を保存していました。特定の組み込みユニットに関連付けるために外部キーフィールドをテーブルに追加し、それを特定のタンクに関連付けるためにイベントテーブルの外部キーを追加しました。
ここに問題があります:タンクの追加、取り外し、または燃料の種類の変更はいつでも可能です。タンクを追加することは問題ではありませんが、削除された場合、記録されたイベントは「孤立しています」。さらに、燃料の種類が「ジェット」から「ロケット」に変更された場合、誰かが歴史を捜索する際に、「ロケット」燃料にこれらの古い出来事が起こったと考えられます。実際には、ジェット燃料。
私はオフラインでいくつかの提案を受けました:(1)タンクのアーカイブテーブルを作成し、何か変更があったら、ユニークなIDを持つそのタンクレコードをアーカイブテーブルに移動し、新しい(2)とタンクテーブルへの「アクティブ」フィールドの新しいIDを記録し、スペックが変更されたときでも新しい行を作成しますが、タンクの現在の状態を「アクティブ」としてフラグを立てます。
これらの提案されたソリューションや他のアイデアは誰でもありますか?
自分自身に質問してください:何が問題なのか、なぜ問題なのですか?これを数回行うと、設計が元々の方法である理由がわかるか、実際に質問が見つかるでしょう。 – xQbert
私はしばらくの間、このアプリケーションの他の部分に集中した後、この問題に戻りました。私はイベントの元の情報を維持しました - 私はイベントテーブルのテキスト検索を避け、それをタンクテーブルのインデックス付きの列にプッシュする方法を考えようとしていました。 – vanjwilson
私は最終的に、タンクテーブルにアクティブフラグを追加して、非アクティブ(引退した)タンクの履歴を管理機能としてルックアップする方法を検討します。 – vanjwilson