あなたの問題には複数の解決策があります。1. logically delete
ユーザーがデータをそのまま保持することも、2. log the user key only
ログ テーブルに保存することもできます。
最初のソリューションは、少数または中程度の数のユーザーがいる場合に最適です。ただし、パフォーマンスのマイナス面があります。アプリケーションが大きくなり、ユーザー数が増えると、Users テーブルにはまだアクティブでないユーザーが残り、それらのレコードによってデータベースの応答が遅くなります (たとえば、ログイン操作中)。 .
2 番目の解決策は、アプリケーションが時間の経過とともに持つユーザーの数に関係なく、適切です。ただし、削除したユーザーのデータは失われます。したがって、5 年前に何らかのアクティビティを行って削除されたユーザーの詳細を知ることはできません。
3 番目の解決策があります。3. using table 'UserArchive'
これは、最初の解決策の利点を組み合わせて、2 番目の解決策の問題を回避します。アプリケーションに存在するすべてのユーザーのデータを含む UserArchive という新しいテーブルを作成できます。Log テーブルを UserArchive テーブルにリンクすると、Users テーブルにユーザーが存在しなくなっても、何らかのアクティビティを行ったすべてのユーザーのデータが得られます。
ユーザーが登録すると、必要な詳細を Users テーブルに追加し、いくつかの重要な (またはすべての) 詳細を UserArchive テーブルに追加できます。(データの冗長性に注意してください。これがデータベースにとって良いか悪いかはあなた次第です)ユーザーがアカウントを削除したい場合、重要な(またはすべての)詳細がUserArchive に保存されます。
アドバイス: 論理的な観点からは必要ないため、Users テーブルを UserArchive に接続しないでください。
どのソリューションがアプリケーションに最適かは、あなた次第です。