有效地在数据库中添加朋友逻辑

时间:2012-11-12 17:45:26

标签: mysql database-design

我期待一种将朋友列表存储在数据库中的逻辑。我想在使用用户标识的数组中添加东西

示例:朋友表中的用户a数组将包含1,2,4,6,77,44等朋友的用户ID数组

我想知道这是否是一种有效的方法。如果没有,理想情况下应该为大型社区实施什么逻辑?

2 个答案:

答案 0 :(得分:1)

不,不,不!

不要在一个数据库字段中存储多个值。它会给你带来很多问题。

你可以使用像这样的结构

friends (user_id, user_id)

表示2位朋友。

答案 1 :(得分:1)

您可能需要一个单独的多对多连接表。为此,如果用户和他们的朋友都在同一个用户表中。该表可能如下所示:

user_id - 正在完成朋友查找的用户的id,是user表中user_id字段的外键 friend_id - 与用户关联的朋友的id,也是用户表

中user_id字段的外键

两个字段都有一个复合主键,确保每个user_id到friend_id组合都是唯一的。

这将是示例CREATE TABLE语句:

CREATE TABLE `friends` (
`user_id` INT(11) NOT NULL,
`friend_id` INT(11) NOT NULL,
PRIMARY KEY (`user_id`, `friend_id`)
)
ENGINE = INNODB;

示例数据可能如下所示:

INSERT INTO `friends` (`user_id`, `friend_id`)
VALUES
(1, 2), (1, 3), (1, 4), (2, 1), (2, 10), (4, 1), (4, 20);

然后说你想查找与特定用户(即登录用户)相关联的朋友的所有用户表数据。您可以像这样查询这些数据:

SELECT users.*
FROM users
INNER JOIN friends ON users.user_id = friends.friend_id 
WHERE friends.user_id = [The ID of current user]