データベース設計をプレーン テキストでモックアップする適切な方法はわかりませんが、私の例が理解できることを願っています。以下は機能しますか?
スキーム#1
テーブル:users
フィールド:user_id
テーブル:stores
フィールド: store_id
,last_update
テーブル:products
フィールド: product_id
,last_update
テーブル:subscriptions
フィールド: user_id
, id
[store_id|product_id],active
テーブル:feed
フィールド: row_id
, user_id
, id
, notified_date
, viewed_date
,active
いくつかの例をモックアップする
サブスクリプション:
doej, store1, true
doej, product1, true
doej, product2, true
...
ユーザーが登録を解除したとき
doej, store1, false
餌:
ストアの更新時にフィード行を作成し、通知を送信する
1, doej, store1, 2015-01-01, null
ユーザー ビューが行を更新するとき
1, doej, store1, 2015-01-01, 2015-01-03
もちろん、「フィード」のユーザーのビューには、おそらくサブスクリプションとフィード テーブルの結合と、アクティブなサブスクリプションが true であることの確認が含まれます。
スキーム#2
スキーム 1 の問題点は、フィード テーブルが必要以上に大きくなることです。可能性のあるすべての更新のフィードの代わりに、日付のしきい値と表示された更新のログを組み合わせて使用することもできます。
テーブル:users
フィールド:user_id
テーブル:stores
フィールド: store_id
,last_update
テーブル:products
フィールド: product_id
,last_update
テーブル:subscriptions
フィールド: user_id
、id
、active
テーブル:updates
フィールド: post_id
, id
[store_id|product_id], date
,description
テーブル:viewed
フィールド: post_id
、user_id
、date
製品の更新投稿
post1, product1, 2015-12-03, 'new and improved'
ユーザーが購読しています
doej, product1, true
更新投稿が日付のしきい値内であり、ユーザーが製品を購読しており、表示されたテーブルにレコードがない場合、ユーザーの投稿を表示します
ユーザーが日付のしきい値内 (たとえば 3 か月以内) に投稿を表示するため、viewed
テーブルを更新します。
post1, doej, 2015-12-07
その後のサイト訪問では、ユーザーへの投稿が表示されません。既に閲覧されています
このスキームでは、ストア/製品の更新に関するレコードは 1 つだけであり、ユーザーの「フィード」アクティビティに関する唯一のレコードは実際のビューです。アイテムが日付のしきい値よりも古い場合、他のすべては「フィード」ビューからロールオフされます。
したがって、私が目指しているのは、アクティブなイベント (製品の更新とユーザー ビュー) のみを記録することだと思います。ユーザーへの更新の通知は、ユーザーが表示しない可能性があるという意味で受動的であるため、フィードに記録しないでください。日付のしきい値でパッシブ イベントを処理します。