Twitterのように@usernameでユーザーメンションを実装したい。しかし、私のアプリでは、ユーザー名が変わる可能性があります。私のアプローチは、データベースに保存する前に投稿を解析し、すべての@usernameを@userIdに変換することです。これについてどう思いますか?誰かがより良い選択肢がありますか?
3 に答える
元のテキストをそのまま保存し、uidとusernameを使用して関連レコードのテーブルを作成します。
スキーマの例:
投稿[表]
id
text
user_mention[テーブル]
id
post_id
user_id_mentioned
user_name_mentioned
投稿が保存されると、コードが通過し、すべてのuser_mentionレコードが作成されます。メンションテーブルをループして、電子メールやその他のやりたいことを送信できます。
ユーザーがユーザー名を変更した場合、新しいユーザー名で投稿を更新するか、古いユーザー名を正しいユーザーにリンクするかを選択できるようになりました。
私のルールは、データベースに保存する前に元の非構造化テキストを決して変更せず(ただし、挿入などを避けるために健全性チェックを行う)、出力時にのみデータを変更することです。これは、常にユーザーがデータを入力していることを意味し、それがいつ価値があるかはわかりません。
ある日、n回言及された後、誰がユーザー名を変更したかに興味がありますか?または、非構造化データを変更したために取得できないその他のレポート。元のデータがいつ必要になるかはわかりません。この場合、テキストを操作しやすくするという追加のボーナスが得られます。
ええ、投稿時にユーザー名リストをチェックして、内部でユーザーIDに変換するのは理にかなっていると思います。次に、投稿を表示するたびに、ユーザーIDを現在のユーザー名に変換し直します。
これは、送信された電子メールなどの動的でないコンテンツではより困難になることに注意してください。
また、ユーザー名は、OPが投稿した単語ではないことを明確にする方法で表示されるようにします。そうしないと、ユーザーが他の人の投稿にテキストを挿入する方法が提供されます。