朋友表 - 存储用户ID或用户名?

时间:2011-04-27 21:54:36

标签: mysql

我的Web应用程序有一个非常典型的用户表设置:

user_id  |  username
--------------------
    0          greg
    1          john
   ...         ...

这两个字段都是索引且唯一的,因此我可以快速按ID或用户名查找用户。

我想保留一个朋友表,并且不确定是否在该表中存储user_id值或用户名:

user_id_1   |   user_id_2
--------------------------

            or

username_1  |   username_2
--------------------------

我想要获得一个用户的朋友列表,所以在friends表中立即拥有用户名而不是在users表上进行连接会很方便:

select * from friends where username_1 = 'greg';

如果我正在存储用户ID,我需要进行连接然后获取用户名 - 这会花费多少钱?:

select * from friends 
    where user_id_1 = x 
    join users where user_id = { all those results }

使用用户ID允许我让用户灵活地更改用户名,但我不会让他们这样做。任何建议都会很棒。

由于

3 个答案:

答案 0 :(得分:1)

对ID的加入不会太糟糕。 ID可能较小,可以存储在磁盘上。此外,我认为朋友列表中除了用户名之外还有其他东西,在这种情况下,无论如何都必须加入。

答案 1 :(得分:1)

好吧,正如你所说,使用id语义意味着你可以更改用户名而无需处理级联效果。对于大多数情况下,PK / UNQ + FK索引会使连接快速响应,但是你可能有一个巨大的表(对于你最终需要某种外部索引或其他工具)。

答案 2 :(得分:1)

如果使用数值,ID将会更小。索引搜索也会更快。 Here您将找到MySQL 5.0的数据类型。

另外,我不知道你是如何使用索引的,但我建议添加和自动增加字段。您可以对表执行此操作,对于这样的整数索引:

ALTER TABLE `Database`.`tableName` ADD COLUMN `indexName` INTEGER  NOT NULL AUTO_INCREMENT