基本数据库设计:类型实例列表

时间:2015-04-28 21:41:40

标签: database-design

这是关于数据库设计的初学者问题。假设我们有一个博客网站,其中包含许多用户,每个用户都有一些博客文章。我们希望快速查找给定用户编写的所有文章。我们可以在帖子表中搜索具有给定userID的所有博客帖子。我们还可以设计用户表以获得用户帖子的列表。这或许意味着存储一串逗号分隔的帖子ID。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您正在寻找database normalization,这种技术可以阻止:

  • 冗余(多次存储相同的数据)
  • 异常(更改一个数据会改变另一个数据)
  • 周期(更改A更改B,更改C,更改A)
  • 重新设计(添加或删除字段需要更改其他字段)
  • 偏见(询问同一问题的不同方式给出了不同的答案)

标准化的典型形式称为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

此设计可以从数据库命令中获取用户或文章中的用户的文章。