我有一个非常基本的问题,就是在我的数据库中存储数据的首选方法。
我有一个名为“users”的表,每个用户都有一个用户名和user_id。现在,我想创建一个名为“评论”的表,供用户评论新闻。
在评论中使用名为“username”的列并存储登录用户的名称,或者使用名为“user_id”的列是否更好?如果我使用user_id,我将不得不让我的sql语句有另一个select语句。 “(SELECT username FROM users WHERE users.id = comments.user_id)as username”。似乎只需存储用户名,性能会更好。
我认为我读过以避免数据库中的重复数据。
哪个更好?
由于
答案 0 :(得分:10)
通常,您使用ID字段将表链接在一起。原因(在您的情况下)您可能允许此人更改其用户名,但您不想尝试更新所有位置...
因此,如您所示,将user_id放在评论表中并在联接上拉出用户名。
答案 1 :(得分:1)
如果user_id是主键,那么你应该使用user_id而不是username,如果你想使用username而不是user_id那么为什么你首先要有user_id?
答案 2 :(得分:1)
如果有可能创建足够大的数据库,请将user_id存储在comments表中。减少开销。还要考虑通过这种方式更容易修改用户名。
答案 3 :(得分:1)
数据应该存储在(至少)third normalized form中,因此您应该使用user_id作为users表中的主键,并将其作为注释表中的外键使用,以获取详细信息:
SELECT comments.*, users.username
FROM comments, users
WHERE users.user_id = comments.user_id;
如果您根据文章获得评论,可以这样做:
SELECT comments.*, users.username
FROM comments, users
WHERE users.user_id = comments.user_id
AND comments.article_id = '$current_article_id';
答案 4 :(得分:0)
存储用户ID(整数)意味着以后加快JOIN。除非你打算让人们手动挖掘数据库,否则没有理由使用用户名
答案 5 :(得分:0)
我非常确定在评论表中存储用户ID就足够了。如果要从comments表返回行,只需使用JOIN语句。
干杯
答案 6 :(得分:0)
哪个是唯一标识符? user_id,我打赌,或者你的系统中不能有两个“John Smith”。
如果卷是一个值得关注的问题,那么匹配用户名字段的文本将比在长期内链接到查询中的用户表更加昂贵。
答案 7 :(得分:0)
数字值加入和索引比字母数字ID更便宜。使用数字唯一标识行。另一个好处是,如果他们需要更改用户ID,则不需要更改PK。最后一个好处是,这是大多数现代Web框架的设计,例如django和rails。