1

現在、アクティビティの種類に応じて他のテーブルを参照する単一のアクティビティ テーブルがあります。

id | type | user_id | source_id | misc_id | date

タイプ列には、ユーザーが実行したアクティビティの種類 (フォロー、いいね、友達になる、ステータスなど) が示され、ソース ID には、アクションのタイプに関連するテーブル ID が含まれます。

これはユーザー アクティビティ ストリームではうまく機能していますが、唯一の問題は、相対テーブルに存在しなくなった行をどうすればよいかわかりません。

たとえば、ユーザーがステータスを作成してから削除したり、後でデータベースから削除された誰かと友達になったりします。

アクティビティが単一の型に関連している場合は、行を削除する外部キー制約を追加できます。しかし、それは異なるテーブルに関連しているため、他にどうすればこれを行うことができますか?

4

2 に答える 2

1

これらのアプローチのいずれかを取る必要があります。

  1. ユーザーが削除するときは、テーブルからハード削除するのではなく、削除済みとしてマークすることにより、バックエンドでソフト削除を行うだけです。このアプローチでは、新しい列「delete_flag」を導入する必要があります。

  2. テーブルをアーカイブし、削除時にレコードを別のテーブルに移動します。しかし、これは複雑なコーディングになるだけでなく、パフォーマンスが期待どおりにならない可能性があります。

于 2013-02-12T21:51:25.523 に答える
1

ここに私の考えがあります。

ユーザーが何かを削除できる場合は、アクティビティ テーブルにも記録できます。

そのアクティビティを非表示にしたい場合は、ReversedOnフィールドを追加して、関連する日付で更新できます。次に、存在しないアクティビティを除外するだけです。

それがユーザー エクスペリエンスの問題を引き起こさない場合は、そのままにしておくことができます。

于 2013-02-12T21:43:17.373 に答える