基本数据库设计:类型实例列表
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
这个设计可以从用户获取文章,或者用户从文章,从数据库命令获取。
这是一个关于数据库设计的初学者问题。假设我们有一个有很多用户的博客网站,每个用户都有几个博客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
这个设计可以从用户获取文章,或者用户从文章,从数据库命令获取。