0

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個のレコードをサポートするためにデータベースをスケーラブルにしたい。

これを行う方法はありますか?大企業はどのようにして同じことを行い、オーバーヘッドを最小限に抑えることができますか?

+0

2)ソリューションでは、投稿が属するグループはユーザーなしでは判別できませんが、ビジネスモデルは正しいですか?ユーザーの所属グループが変更されると、その所属グループも変更されます。 –

答えて

1

あなたはあなたが持っているdbmsを指定していません。

セキュリティ(権限)システムが組み込まれているISO/IEC/ANSI SQLデータベースでは、SQL機能を使用して権限を設定するだけで、その必要はありません。これは内部的で非常に高速です。

パフォーマンス、スケーラビリティ、データの完全性が必要な場合は、オブジェクトとクラスのアイデアを放棄し、リレーショナルデータベースについて少し学ぶ必要があります。さらに、データをリレーショナルデータベース(オブジェクトクラスではない)としてモデル化すると、上記の質問の90%は存在しません。

私が言っていることを理解できない場合は、recent post(12月11日の見出しから)をお読みください。

もっと意味のある方法はありますか?大企業はどのようにして同じことを行い、オーバーヘッドを最小限に抑えることができますか?

はい、絶対に。それは意味がありません。理にかなっているのは、正規化モデルが全体的にはるかに高速であるため、データを適切にモデル化することです。これは、より小さいテーブルではなく、より小さいテーブルを生成します。物理学の算術法則が働く。データの重複がないということは、更新の異常がないことを意味します。これは、トランザクションが小さくなり、ブロックする可能性が低いことを意味します(複数のユーザーの同時アクセスを許可する必要があります)。

その他、データが他のデータとどのように関連しているかを把握することができないため、コーディングが妨げられます。エンティティ(すべてのページのデータコンテンツ)を質問に投げて(編集して追加してください)、私たちは行きます。私は、UserGroupPostを見ることができますが、約Wallは約です。その他の家具。 Photos,Albums

関連する問題