如果我想创建一个允许用户拥有 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/