社交网络的数据模型?

Sta*_*bie 8 mysql database database-design data-modeling

如果我想创建一个允许用户拥有0个或更多"朋友"的网站,我将如何在数据库中建模这样的关系?这样简单的工作会是什么:

Table Friends
- Id (PK)
- UserId (FK)
- FriendId (FK)
Run Code Online (Sandbox Code Playgroud)

???

这会让我以后做像Facebook这样的事情(例如"你的3个朋友知道这个用户,也许你也这样做了")?或者类似6度到凯文培根的东西?

编辑1:

Table Friends
- UserId (FK)
- FriendId (FK)
- Status ('Pending', 'Approved', 'Rejected', 'Blocked'?)
Run Code Online (Sandbox Code Playgroud)

Ash*_*ane 2

这会起作用。以下是需要注意的几点:

  • 有没有好友确认之类的东西。如果是,您将不得不考虑如何存储“待处理”
  • 对 UserId 和 FriendId 建立索引。这些是您将用来连接表的值。
  • 无序对(UserId、FriendId)是主键的竞争者。
  • 假设 Uid_1 和 Fid_1 是朋友,其中 Uid_1 != Fid_1 那么你的朋友表存储 (Fid_1, Uid_1) 以及 (Uid_1, Fid_1)。
  • 您要搜索的关系程度有多深。

每次你必须查询 DOR(关系度)时,你都必须初始化一个图并运行最短路径算法(这是我能想到的最少的优化)。如果您的会员数量增加到几公斤,那么您将如何处理?