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

Basic database design : list of instances of type

这是一个关于数据库设计的初学者问题。假设我们有一个有很多用户的博客网站,每个用户都有几个博客post。我们想快速找到给定用户撰写的所有文章。我们可以在 post table 中搜索具有给定用户 ID 的所有博客 post。我们还可以将用户 table 设计为拥有用户 post 的列表。这可能意味着存储一串逗号分隔的 post ID。执行此操作的正确方法是什么?

您正在寻找 database normalization,一种技术可以防止:

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

规范化的典型形式称为Boyce-Codd Normal Form and is, in general, quite difficult to do, but you can improve your design by implementing the lower Normal Forms

您没有给我们足够的信息来为您推荐模式,但是如果您需要区分 post 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

这个设计可以从用户获取文章,或者用户从文章,从数据库命令获取。