ユーザー通知のためにデータベースをノーマライズする必要があると思います。たとえば、ユーザー(ユーザーが考慮する必要があります)にフラグを立てた場合、flag ENUM('yes', 'no')
(またはステータス列)の列を追加します。ユーザーのフラグ付きイベントの検索は、WHERE句user_id='XX' AND flag='yes'
を使用してカウントできます。ユーザ通知のためにmysqlデータベースを非正規化するには?
この正規化された構造は問題ありません。異なる種類の通知がある場合はどうなりますか。例えば投稿、コメント、写真のフラグ...これは、ユーザーが自分のプロフィールページに行っているときに複数のテーブルをカウントする必要があることを意味します。これは、異なるサイトの通知を取得するため、スタックエクスチェンジのようなプロジェクト間で重大です。
私はデ正規化はこの場合
post_flags tinyint(3),
comment_flags tinyint(3),
photo_flags tinyint(3),
としてユーザテーブルに通知列を追加するのを助けることができると思うが、我々はすべての対応するアクションにユーザフラグの列を更新するための追加の書き込みクエリを実行する必要があります。たとえば、投稿にフラグを付ける場合:UPDATE users SET post_flags=post_flags+1 WHERE user_id='XX'
。私の懸念事項は、この数字とフラグ付き投稿の数の間の不一致を避けるために、後者の質問の実行を確実にすることです。私はそれがTRANSACTION
によって確保できると思います。
このようにして、頻繁に訪問されたプロファイルページに対して1つのクエリですべての通知を取得します。
私は適切なトラックにいますか?この目的のために別のトリッキーなアプローチが一般的ですか?
'tinyint(3)'には何を保存しますか?複数のエントリがありませんか? –
通知の数。例えば、ポストにフラグを立てると、UPDATEユーザのクエリを実行します。SET post_flags = post_flags + 1 WHERE user_id = 'XX'' – Googlebot
"flag ENUM(' yes '、' no ') ? – Ivan