我有2个表用户和评论。
在效果方面,我应该使用加入(使用用户ID)从用户表中获取用户名,还是应该在评论中添加列用户名,所以我不需要加入只有1个数据(用户名),但我需要为每个评论(用户名)添加一个数据。
如果表格中有很多评论,加入会很慢吗?
我该怎么办?加入或添加列用户名到评论。
谢谢。
答案 0 :(得分:3)
加入可能是最好的,因此您不会将数据存储在两个地方。如果用户名被更改怎么办?它不会更改注释的用户名。此外,连接两个表并不是非常耗时。
答案 1 :(得分:1)
这取决于用户和评论的数量。拥有denormalized db,这就是你所要求的,可以更快,但是你需要自己在两个表中更新用户名。如果您采用连接方式,请不要忘记在注释表中添加userid的索引。 所以我认为正确的答案是加入,如果需要,可以在以后进行非规范化。
答案 2 :(得分:0)
如果您使用的是InnoDB,则可以添加列并添加外键限制。这样可以提高效率,减少对更新索引的担忧。
答案 3 :(得分:0)
在评论表中存储用户名的一个原因是,如果您想在创建评论时知道用户名。如果随后更改了用户名,则在评论时您仍会拥有该名称。
但是,一般情况下,您希望使用join。您希望在定义的表上拥有主键,可能是自动递增(标识)整数值。
如果您担心获得单个用户的所有评论的性能,那么您应该在用户ID字段的评论表上构建索引。
答案 4 :(得分:0)
就个人而言,我宁愿使用两个简单的单独查询。我不喜欢加入这么多。根据定义,连接只生成重复数据。您可能想要检查http://www.notorm.com/这是一个简单的php db访问层,它是无连接的。