2

私は、より高度な Web 開発手法に取り組もうとしており、オブジェクトの関係を必要とするいくつかのプロジェクトを念頭に置いています。私は PHP で開発を行っており、サイトを完全にオブジェクト指向にすることを計画しています。

Facebook のような Web サイトには、ユーザー、友人、グループ、イベント、いいね、投稿、コメントなどの間に関係があります。ユーザーは 1 つまたは複数のグループに属することができ、グループには多くのユーザーを含めることができます。これと同じ種類の関係は、イベント、いいね、投稿、コメントなどにも当てはまります。だから私の質問は、これらの関係がどのように処理され、保存されるのですか?

明らかに、実際のコンテンツを保持する非常に複雑なデータベースがありますが、「どのユーザーがどのグループに属しているか」などの関係を定義する場合、これはどのように処理されるのでしょうか? すべてのグループは、ハッシュや ID 番号などの一意の ID を持っていますか? そして、ユーザーは「mygroups」配列などを持ち、ユーザーをグループの一部にするかどうかを示すグループ ID を追加/削除し続けます。

私は軌道から外れているかもしれませんが、私の質問に光を当てることは素晴らしいことです. ありがとう!

4

2 に答える 2

1

このテーマに精通している人なら、もっと詳しく説明できるでしょうが、そのとおりです。各グループ、ユーザーなどには一意の ID があります。ユーザーとグループの間の関係、および友人関係はすべて、リレーショナル データベースのテーブルに存在します。

データベースはあなたが思っているほど複雑ではないと思います。ユーザーがユーザー ID を持っている場合、友情は次のような友情テーブルで表すことができます。

Friendship table
----------------
  UserID | FriendID
  User_A | Friend_1
  User_A | Friend_2
  etc...

グループメンバーシップ:

 Groupmembership table
  GroupID | UserID
   GroupA | User1
   GroupA | User2
   etc...

このようにするべきだと言っているわけではありませんが、これは 1 つの可能な解決策です。通常のリレーショナル データベースを使用することです。

Facebook にとって、本当の複雑さは、大規模なデータベースのパフォーマンスを最適化することにあるようです。

于 2012-08-06T20:55:58.980 に答える
1

例を見てみましょう。ユーザーとグループ。

これは、多対多の関係シップです。つまり、1 人のユーザーは 0 個以上のグループに所属でき、1 つのグループは 1 人以上のユーザーを持つことができます。

したがって、3つのテーブルがあります

ユーザー表

USER_ID (INT) Primary Key
USER_NAME V(VARCHAR)

グループテーブル

GROUP_ID (INT) Primary Key
GROUP_NAME (INT) 

ユーザー・グループ

USER_GROUP_ID (INT) Primary Key
GROUP_ID (INT) Foriegn Key (to GROUP Table, GROUP_ID Column)
USER_ID (INT) Foriegn Key (to USERTable, USER_ID Column)

いくつかのサンプルデータは次のようになります

ユーザー

 USER_ID              USER_NAME
 --------------------------------
 1                    Scott
 2                    Jon
 3                    Mike

グループ

 GROUP_ID              GROUP_NAME
 --------------------------------
 161                    Bloggers
 162                    Geeks

ユーザー・グループ

 USER_GROUP_ID   USER_ID              GROUP_ID
 ----------------------------------------------
   1                1                    161
   2                2                    161
   3                2                    162
   4                3                    161

これの意味は

1) Scott、Jon、Mike は Bloggers グループに参加しています。

2) Scott は Geeks グループに参加しています。

于 2012-08-06T20:57:03.447 に答える