Database design 基本数据库设计:类型为的实例列表
这是一个关于数据库设计的初学者问题。假设我们有一个有很多用户的博客网站,每个用户都有一些博客文章。我们希望快速找到给定用户编写的所有文章。我们可以在post表中搜索具有给定用户ID的所有博客文章。我们还可以将用户表设计为包含用户帖子的列表。这可能意味着存储一个逗号分隔的post ID字符串。正确的方法是什么?您正在寻找的一种技术可以防止:Database design 基本数据库设计:类型为的实例列表,database-design,Database Design,这是一个关于数据库设计的初学者问题。假设我们有一个有很多用户的博客网站,每个用户都有一些博客文章。我们希望快速找到给定用户编写的所有文章。我们可以在post表中搜索具有给定用户ID的所有博客文章。我们还可以将用户表设计为包含用户帖子的列表。这可能意味着存储一个逗号分隔的post ID字符串。正确的方法是什么?您正在寻找的一种技术可以防止: 冗余(多次存储相同数据) 异常(改变一个基准改变另一个基准) 循环(改变A改变B改变C改变A) 重新设计(添加或删除字段需要更改其他字段) 偏见(问同一个问
- 冗余(多次存储相同数据)
- 异常(改变一个基准改变另一个基准)
- 循环(改变A改变B改变C改变A)
- 重新设计(添加或删除字段需要更改其他字段)
- 偏见(问同一个问题的不同方式会给出不同的答案)
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
此设计可以从用户处获取文章,或从文章中获取用户,或从数据库命令获取文章。您正在寻找的一种技术可以防止:
- 冗余(多次存储相同数据)
- 异常(改变一个基准改变另一个基准)
- 循环(改变A改变B改变C改变A)
- 重新设计(添加或删除字段需要更改其他字段)
- 偏见(问同一个问题的不同方式会给出不同的答案)
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
此设计可以从用户处获取文章,或从文章中获取用户,或从数据库命令获取文章。您正在寻找的一种技术可以防止:
- 冗余(多次存储相同数据)
- 异常(改变一个基准改变另一个基准)
- 循环(改变A改变B改变C改变A)
- 重新设计(添加或删除字段需要更改其他字段)
- 偏见(问同一个问题的不同方式会给出不同的答案)
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
此设计可以从用户处获取文章,或从文章中获取用户,或从数据库命令获取文章。您正在寻找的一种技术可以防止:
- 冗余(多次存储相同数据)
- 异常(改变一个基准改变另一个基准)
- 循环(改变A改变B改变C改变A)
- 重新设计(添加或删除字段需要更改其他字段)
- 偏见(问同一个问题的不同方式会给出不同的答案)
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的第二列搜索文档表的效率如何?完全取决于您使用的数据库技术。大多数数据库都允许在不影响数据的情况下进行性能调优查找。@user442920关系数据库通常不使用红黑树-它们适合内存中的操作,但与数据库页(基本上是磁盘分配单元)不一致。相反,B-树几乎被广泛使用。是的,您可以在同一个表的顶部有几个B树索引(在本例中,您可以在
userID
上有索引)。为了更好地理解,我强烈建议阅读(以及几乎整个网站)。@user442920并澄清Dour的答案:存储列表是“错误的”,因为它违反了1NF的原则。与精心设计的索引方案相比,它会损害您的数据完整性(通常比性能更重要),最终也会损害您的性能。谢谢。我还有一个问题。我假设数据库在主键上实现了红黑树,但其他列又如何呢?通过userID的第二列搜索文档表的效率如何?完全取决于您使用的数据库技术。大多数数据库都允许在不影响数据的情况下进行性能调优查找。@user442920关系数据库通常不使用红黑树-它们适合内存中的操作,但与数据库页(基本上是磁盘分配单元)不一致。相反,B-树几乎被广泛使用。是的,你可以有几个B-tr