mysql - 社交网络的数据模型?

标签 mysql database database-design data-modeling

如果我想创建一个允许用户拥有 0 个或更多“ friend ”的站点,我将如何在数据库中对这种关系建模?这个简单的东西会起作用吗:

Table Friends
- Id (PK)
- UserId (FK)
- FriendId (FK)

???

这是否允许我以后做一些像 Facebook 那样的事情(例如“你的 3 个 friend 认识这个用户,也许你也认识”)?或者类似 6 度到 Kevin-Bacon?

编辑 1:

Table Friends
- UserId (FK)
- FriendId (FK)
- Status ('Pending', 'Approved', 'Rejected', 'Blocked'?)

最佳答案

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

  • 你有 friend 确认之类的东西吗?如果是,您将不得不考虑如何存储“待定”
  • 索引 UserId 和 FriendId。这些是您加入表格所依据的值(value)观。
  • 无序对 (UserId, FriendId) 是主键的竞争者。
  • 假设 Uid_1 和 Fid_1 是 friend ,其中 Uid_1 != Fid_1 那么您的 Friends Table 存储 (Fid_1, Uid_1) 以及 (Uid_1, Fid_1)。
  • 您要搜索多远的关系。

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

关于mysql - 社交网络的数据模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4177163/

相关文章:

mysql - 服务器场如何处理数据库?

sql-server - 计算每月的小时数

c# - 比赛 : Storing an arbitrary number of fields

php - 用不同的值更新一个数据库表列

mysql - 从 MySQL 中的 JSON 列中的 JSON 项目的日期查询日期之前的记录

database - 为 CMS 等版本控制系统创建数据库的最佳实践

MVC WebAPI 的 MySQL 数据库表设计

PHP+MySQL : Creating a photo gallery based on views

php - 在 mySQL 表中搜索用户并将 true 或 false 返回到 $result?

javascript - 如何在 Mongoose 中找到与数组字段的最后一个元素与给定查询值匹配的所有文档?