【发布时间】:2015-04-30 10:29:21
【问题描述】:
这是一个关于数据库设计的初学者问题。假设我们有一个有很多用户的博客网站,每个用户都有几篇博客文章。我们希望快速找到给定用户撰写的所有文章。我们可以在帖子表中搜索具有给定用户 ID 的所有博客帖子。我们还可以将用户表设计为包含用户帖子的列表。这可能意味着存储一串逗号分隔的帖子 ID。这样做的正确方法是什么?
【问题讨论】:
标签: database-design
这是一个关于数据库设计的初学者问题。假设我们有一个有很多用户的博客网站,每个用户都有几篇博客文章。我们希望快速找到给定用户撰写的所有文章。我们可以在帖子表中搜索具有给定用户 ID 的所有博客帖子。我们还可以将用户表设计为包含用户帖子的列表。这可能意味着存储一串逗号分隔的帖子 ID。这样做的正确方法是什么?
【问题讨论】:
标签: database-design
您正在寻找database normalization,这是一种防止:
规范化的典型形式称为Boyce-Codd Normal Form,通常很难做到,但您可以通过实现较低的Normal Forms 来改进您的设计。
您没有向我们提供足够的信息来为您推荐架构,但是如果您需要区分帖子 ID,则“存储一串逗号分隔的帖子 ID”是错误的做法。如果这就是你想要的,你应该考虑这样的设计:
Users
userID other user fields ..
100 Charlie
101 Edith
Articles
articleID userID pathOrWhatever...
1000 100 http://example.com/stuff
1001 100 http://example.com/moreStuff
1002 101 http://example.com/somethingElse
这种设计可以从用户那里获取文章,或者从文章中获取用户,从数据库命令中获取。
【讨论】:
userID 上拥有索引)。为了更好地理解,我强烈建议您阅读Anatomy of an SQL Index(以及几乎整个use-the-index-luke.com 网站)。