0

私は昨年大きなプロジェクトに参加しました。それは教育管理システムでした。私のチームは、開発中に多くの問題を解決しました。しかし、私たちは 1 つの問題を抱えていました。

問題は次のとおりです。

参照を含む一部のレコードをソフトウェア インターフェイスから削除できる場合、データベース構造を設計するにはどうすればよいですか?

簡単な例: テーブルがあるとします:

Students, StudentClass, Marks, Classes

. したがって、テーブルからレコードを削除しようとすると、テーブルにはテーブルへの参照が'Classes'あるため、不可能になります。もちろん、依存テーブルからレコードを削除してからレコードを削除することもできますが、データを保持する必要があります。'StudentClass''Classes'StudentClass, etc.'Classes'

私は解決策を見つけました。他の人が参照しているすべてのテーブルで、列を作成します'IsDeleted'。つまり、テーブルからレコードを削除したい場合は、列を に'Classes'更新するだけです。ユーザーに表示するには、使用します'IsDeleted'1"SELECT * .... FROM ... WHERE Classes.IsDeleted = 0".

これが私の解決策です!そのような問題をどのように解決するか、あなたのアプローチを教えてください。どんな意見でも私にとって興味深いものになります!お返事ありがとうございます!!!!

編集:

他に解決策はありますか?

4

1 に答える 1

0

かなり古典的な問題であり、あなたのソリューションが何度も実装されているのを見てきました。多くの場合、データベースにはまだデータがありますが、UI には表示されないため、「ソフト」削除と呼ばれます。

考えられる 2 つの潜在的な欠点があります。

  1. 開発者は、ある時点で、削除されたフラグでフィルタリングすることを常に忘れています。
  2. 削除しないと、テーブルが大きくなる可能性があり、ある時点でクエリ時間に影響を与える可能性があります。

両方の問題を軽減するための 1 つの潜在的な解決策は、削除されたデータを別の場所にアーカイブ/移動するジョブを時々実行することです。いつでもクエリを実行したり、必要に応じて後で復元したりできますが、他の「ライブ」レコードには影響しません。

于 2013-04-08T18:08:29.503 に答える