これは、データベース設計でよくある問題です。「アクティブ」ではなくなったレコードを分離するか「アーカイブ」するかという問題です。
最も一般的なアプローチは次のとおりです。
- 1つのテーブルのすべてで、必要に応じて注文を「完了」としてマークします。長所:最も単純なソリューション(コードと構造の両方)、優れた柔軟性(たとえば、注文を「復活」させるのが簡単)。短所:テーブルが非常に大きくなる可能性があり、クエリと例の両方で問題が発生します。バックアップ。
- 古いものをアーカイブしてテーブルを分離します。最初のアプローチから問題を解決しますが、複雑さが増します。
- 値ベースのパーティショニングでテーブルを使用します。つまり、論理的に(アプリケーションにとって)すべてが1つのテーブルにありますが、舞台裏では、DBMSは、いくつかの列の値に応じて、データを別々の領域に配置します。パーティション化には、おそらく「完了」列または「注文完了日」を使用します。
最後のアプローチは、最初の2つの優れた部分を組み合わせたものですが、DBMSでのサポートが必要であり、セットアップがより複雑です。
注:
「アーカイブされた」データのみを格納するテーブルは、一般に「アーカイブテーブル」と呼ばれます。一部のDBMSは、これらのテーブルに特別なストレージエンジン(MySQLなど)を提供します。これらのエンジンは、変更や挿入が遅くなる代わりに、迅速な取得と優れたストレージ効率を実現するように最適化されています。