2

ユーザーが写真を投稿したり、コメントしたり、投票したり、他の多くのタスクを実行できるギャラリーを開発しています。

現在、ユーザーが希望する場合は、購読を解除してすべてのデータを削除できるようにするのが正しいと思います。ただし、アプリケーションを壊すリスクがあるため、そのようなことを許可することは困難です (たとえば、コメントに多くの返信がある場合はどうすればよいでしょうか? さまざまなユーザーによる多くの改訂があるページはどうすればよいでしょうか?)。

写真は簡単に削除できますが、その他のデータ (コメント、改訂など) については、次の 3 つの可能性があると考えました。

  • それを管理者に割り当てます
  • 「removed-user」というユーザーに割り当てます
  • 現在の関連付け (つまり、ユーザー ID) を維持し、ユーザーのデータの名前のみを変更します (たとえば、「removed-user-24」などの新しいユーザー名と、「noreply-removed-user-24@mysite」などの存在しない電子メールを割り当てます)。 .com」

ユーザーにアカウントの削除を許可する場合に従うべきベスト プラクティスは何ですか? それらをどのように実装しますか (特に Rails で)。

4

5 に答える 5

5

私は通常、ユーザーにアクティブフラグを設定し、ユーザーが削除されたときにアクティブをfalseに設定することで、このタイプの問題を解決しました。そうすれば、ユーザーが「削除」された場合でも、システム全体で参照整合性を維持できます。ビジネスレイヤーでは、ユーザーが操作を実行できるようにする前に、ユーザーがアクティブであることを常に検証します。また、データを取得するときに非アクティブなユーザーをフィルタリングします。

于 2009-06-29T13:42:55.250 に答える
2

通常は、データベースからそれらを削除する代わりに、ブールフラグフィールドを追加して、有効なユーザーの場合はtrue、無効なユーザーの場合はfalseにします。フラグでフィルタリングするコードを追加する必要があります。また、可能な限りすべての関連データをユーザーから削除する必要があります。このフラグの主な目的は、リンクをそのまま維持することです。これは、ユーザーのデータの名前変更の変形ですが、フラグの確認が容易になります。

于 2009-06-29T13:40:56.377 に答える
1

私は通常、何も削除するのが好きではなく、代わりに状態を使用してレコードを削除済み/未公開としてマークすることを選択します(AASMを使用すると、つまりステートマシンとして機能します)。

イベントを使用して属性を更新したり、電子メールなどを一挙に送信したりできるため、フラグを使用するよりも状態とイベントの方が好きです。次に、状態を確認して、後で何をするかを決定します。

HTH。

于 2009-06-29T13:42:54.033 に答える
1

理想的には、システムではデータを「完全に削除」したくないでしょう。私が知っていて、過去に実装した最良の方法は「ソフト削除」です。すべてのデータテーブルでステータス列を維持します。これは、理想的には、行がアクティブであるかどうかという事実を参照します。作成された行は、デフォルトで「アクティブ」です。ただし、エントリが削除されると、それらは非アクティブになります。

画面にデータを表示するすべてのselectクエリは、「アクティブなレコード」の結果のみをフィルタリングします。このようにして、次の利点が得られます。1.データ回復が可能です。2.データベースレベルでスケジュールされたタスクを持つことができます。これにより、ある方法で1回のハード削除を処理できます。本当に必要な場合。(SQLプロシージャなどのように)3。管理画面を使用して、削除対象として本当にマークするアカウントやエントリなどを決定できます。4.アカウントの一時的な無効化も、同じソリューションで実装できます。

私が取り組んできた本番環境では、ハード削除は厳密なNo-Noです。実際の監査は、削除についても維持されます。しかし、アプリケーションが本当に小さい場合。それはユーザー次第です。

それでも、dbレベルで定期的にクリーンアップする「仮想削除」または「ソフト削除」をお勧めします。これは、より高速で効率的で最適化されたクリーンアップ方法になります。

于 2009-06-29T13:43:49.710 に答える
1

ユーザー レコードだけでなく、そのユーザーに関連するすべての情報に対して、ユーザーが退会した日時を含む削除日フィールドを挿入することをお勧めします。アプリは、何かを表示する前にフィールドをチェックする必要があります。その後、削除日から 30 日後 (選択した時間) にすべてのレコードに対して物理削除を実行できます。これにより、情報が表示されなくなり (おそらくいくつかの場所でアプリを更新する必要があります)、ユーザーが再サブスクライブできるようにする時間 (偶発的または再考)、および古いデータを削除するためのスケジュールされたプロセスが可能になります。メンバーに関するすべての情報と、メンバーに関する関連コメント、または以前に公開されたデータ (写真など) を削除します。

于 2009-06-29T17:51:20.870 に答える