Facebookスタイルの方法でユーザーを特定のグループに関連付けるアプリケーションがあります。例えばデータベースのユーザー権限を指定する最も効率的な方法は何ですか?
:
ユーザAがグループ1に関連付けられ、グループ2
ユーザBをグループ2に関連付けられているグループ4
ユーザーは(少量のポストを作成することができ彼らが所属する各グループのためのテキストの
ログインしているユーザーのホームページと、各グループのページの2種類のページがあります。ユーザのホームページには、すべてのグループに属するすべてのユーザの投稿が表示されます。ログインユーザがに属しています。グループページには、そのグループのであるすべてのユーザーからの投稿がすべて表示されます。
ここではFaceBookを複製しようとしていませんが、FaceBook上の友人からのメッセージがライブフィードページやユーザーの壁面(プロフィールページ)。
class User():
user_name
first_name
last_name
class Group():
group_name
class Post():
post_content
データベースのスケーラビリティとパフォーマンスの面で、これらのデータを関連付けるための最も効率的な方法は何ですか:私のアプリケーションで
、私は、これらの3つのモデル(擬似コード)を持っていますか?1)各投稿をユーザーとグループに関連付けます。ユーザーがグループを表示するときは、グループID =現在のグループのPost
テーブルからすべての投稿を選択します。ユーザーが自分のホームページを閲覧すると、そのユーザーが属するグループを確認し、そのグループに属する他のすべてのユーザーを検索します。その後、それらのユーザーからすべての投稿を取得します。
2)すべての投稿をユーザーに関連付けます。ユーザーが自分のホームページを閲覧すると、そのユーザーが属するグループを確認し、そのグループに属する他のすべてのユーザーを検索します。その後、それらのユーザーからすべての投稿を取得します。グループのページを表示するときは、そのグループに属するすべてのユーザーを見つけて、それらのユーザーに関連付けられたすべての投稿をプルします。
3)PostID、UserID、およびGroupIDを持つ結合テーブルを作成します。グループを表示しているときに、GroupIDを持っている投稿をすべて見つけ出し、それらの投稿をプルします。ログインしているユーザーのホームページを表示するときは、ユーザーが所属するすべてのグループを見つけて、そのグループに属するすべてのユーザーを見つけて、そのユーザーのすべての投稿を取得します。
これらのソリューションはすべて、ユーザーのホームページのレコードを取得するために多くの余分な作業を必要とするようです。これらのオプションはどれも最善の解決策のように見えません。私は誰かがこれを経験していると確信しています。私は大量の投稿を期待しているので、X個のレコードをサポートするためにデータベースをスケーラブルにしたい。
これを行う方法はありますか?大企業はどのようにして同じことを行い、オーバーヘッドを最小限に抑えることができますか?
2)ソリューションでは、投稿が属するグループはユーザーなしでは判別できませんが、ビジネスモデルは正しいですか?ユーザーの所属グループが変更されると、その所属グループも変更されます。 –