0
这是一个关于数据库设计的初学者问题。假设我们有一个拥有许多用户的博客网站,每个用户都有一些博客帖子。我们希望快速查找给定用户编写的所有文章。我们可以使用给定的userID在帖子表中搜索所有博客文章。我们还可以设计用户表以获取用户帖子的列表。这也许意味着,可能会存储一串以逗号分隔的帖子ID。什么是正确的方法来做到这一点?基本数据库设计:类型实例列表
这是一个关于数据库设计的初学者问题。假设我们有一个拥有许多用户的博客网站,每个用户都有一些博客帖子。我们希望快速查找给定用户编写的所有文章。我们可以使用给定的userID在帖子表中搜索所有博客文章。我们还可以设计用户表以获取用户帖子的列表。这也许意味着,可能会存储一串以逗号分隔的帖子ID。什么是正确的方法来做到这一点?基本数据库设计:类型实例列表
你正在寻找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
这样的设计可以从用户的文章,或者用户的文章,从数据库命令。
谢谢Arch。我有另一个问题。我假设数据库在主键上实现了红黑树,但其他列又如何?通过用户标识的辅助列搜索文档表格效率如何? – user442920
完全依赖于您使用的数据库技术。大多数允许调整查找性能而不影响数据。 –
@ user442920关系数据库通常不使用红黑树 - 它们适用于内存中操作,但与数据库页面(本质上是磁盘分配的单位)并不完全一致。相反,B树几乎普遍使用。是的,你可以在同一个表的顶部有几个B-tree索引(在这种情况下,你可以在'userID'上有索引)。为了更好地理解,我热烈推荐阅读[SQL索引解析](http://use-the-index-luke.com/sql/anatomy)(以及几乎整个http:// use-the-index-就此而言,luke.com/ site)。 –