我有一个 MySQL 数据库,我在其中存储有关每个用户的数据。
我想为每个用户添加一个好友列表。我应该为数据库中的每个用户创建一个 friend 表还是有更好的方法?
最佳答案
假设您的所有 friend 也在用户表中,您将需要一个 friend 表,该表定义了简单的一对多关系 - 将用户表链接回自身。所以
User Table
UserID int identity not null
[other attribute fields]
Friends Table
UserIDLink1 int
UserIDLink2 int
[other attribute field]
其中 UserIDLink1 和 UserIDLink2 都是 Users 表上的外键。
例如,如果我有三个用户
1 Joe
2 Bill
3 Jane
Joe 和 Jane 是 friend ,那么 Friends 表将包含一行
1 3
以上隐含假设如果 A 是 B 的 friend ,则 B 是 A 的 friend - 如果不是这种情况,您可能希望将 UserIDLink1 和 UserIDLink2 重命名为 UserID 和 FriendID 或类似的 - 在这种情况下您的记录也将翻倍。
对于双向配置(如果 B 是 A 的 friend ,A 是 B 的 friend ),您应该在 Friends 表上为 (UserIDLink1,UserIDLink2) 和 (UserIDLink2,UserIDLink1) 设置索引,以确保访问是如果我们搜索 joe 的 friend 或 jane 的 friend ,总是有效的(如果您没有设置第二个索引,那么第一个查询将是一个有效的索引查找,但第二个查询需要全表扫描)。
如果您的链接不是双向的,则无需找出 A 的 friend 是谁,但您可能仍然最需要它,因为您可能还需要找出 B 的 friend 是谁。
关于MySQL 好友表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3009190/