SQL表设计建议

时间:2011-09-08 15:00:19

标签: sql database-design database-performance

我正在建立一个社区网站,通过电子邮件登录,会员可以更改他们的姓名/昵称。

您认为我应该在会员表中使用会员的其他属性保留会员名称/昵称,还是创建另一个表,在该表上写成员名称/昵称以及关联成员的ID。

我赞成第二种选择,因为我认为从中提取成员名称会更快。

这是对的/更好的方式吗?

更新:其他表的原因是我需要为不同的部分提取用户名。例如论坛。从主题中为每个帖子查询一个小表是不是更快?

4 个答案:

答案 0 :(得分:4)

我会保留一个表,并在该表的电子邮件中设置唯一约束。

我在添加另一个表时看不到一个优势。

答案 1 :(得分:3)

使用第一个选项:将名称/昵称保留在成员表中。在这种情况下,不需要引入额外的表,以及与之相关的连接开销。

答案 2 :(得分:3)

为什么你认为第二种选择会更快?

如果昵称是与成员ID必需的一对一关系,则存储它们的适当位置在同一个表中。这仍然是一个索引的单记录搜索,所以它应该或多或少与你的其他选项一样快。

事实上,这个解决方案可能会更快,因为你可以在相同的 SELECT中得到昵称,因为你得到了其他信息。

更新以回答问题的更新:

第二个表的行数不小。 SQL搜索中的主要因素是:1)表中的记录数和2)搜索索引部分的可能匹配数。

在这种情况下,较小表中的记录数与较大的表完全相同。并且索引返回的可能匹配记录的数量始终为1,因为成员ID是唯一的。

您正在搜索的表中的列数通常与返回数据所用的时间无关(您在SELECT语句中实际列出的列数可能会产生影响,但无论哪个表都相同,这都是相同的你正在寻找。)

SQL数据库非常非常擅长查找数据。正确构建数据并让数据库担心将其恢复。正如他们所说,过早优化是万恶之源。

答案 3 :(得分:0)

是的,将会员的ID与其他财产相关联是正确的方法。

您只需在名称上创建索引即可加快查询速度。

相关问题