MySQL 好友表

标签 mysql database-design data-modeling

我有一个 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/

相关文章:

php - 数据不更新

php - 为每个事件构建标签列表

mysql - 数据库和表

sql-server - 将多个相同类型的表数据建模为一个表,以将所有表聚合为一个表

mysql - 如何评价数据库系统中一张表的好坏?

cassandra - 这个主键如何获取组中的所有用户?

mysql - 在 MYSQL 查询中使用 If

php - 这是我插入数据库的图像。但它不会显示文件夹中的图像路径或图像?

php - 在 Laravel 4 模型上使用 setConnection

sql-server - 聚集索引中间叶之间的顺序遍历是如何使用的?