具有更多列的单个表与具有更少列的多个表


8

对于社交网站,哪种数据库设计更好?具有更多列和更少行的单个表,还是具有更少列但更多行的多个表?

例如:用户可以在自己的墙上或群组中发布更新。

我可以想到的两种数据库设计是:

设计1

用户帖子

  • ID
  • 用户身份
  • 发布
  • 约会时间

UserGroupPost

  • ID
  • groupId
  • 用户身份
  • 发布
  • 约会时间

潜在问题:可能需要加入,这可能(将来)成为缓慢的查询。

设计2

帖子

  • ID
  • 用户身份
  • groupId
  • 发布
  • 日期时间(如果用户在墙上张贴,则groupid将为null)

潜在问题:循环遍历大型数据集可能需要花费很长时间。


数据增加时如何获得更好的性能?还有其他(更好)的方法吗?


对我来说,多排几列。与拥有大型数据集相比,按部分地管理很容易。如果您最关心的是将来的大数据,请不要。Sql server设计时遇到了这种问题,您要做的就是正确设计它。如果您知道如何优化查询,那么拥有大型数据集就不是问题
Vincent Dagpin

使用执行计划确实有很大帮助。它告诉您查询的问题是什么。PS:不这样做循环,如果可能的话使用批量处理,该功能是已经存在,使用它
文森特Dagpin

Answers:


2

我的倾向总是设计选项1,或者至少沿着这些思路。不必担心在将来的查询中消除联接表的麻烦-任何规范化的数据库都将在任何有用的查询中使用联接,这就是关系数据库。

另外,为什么您必须必须为您的网站加入userPosts和userGroupPosts表?它们不会分开显示吗?你会加入这些表的唯一原因是,也许职位搜索时,但它不应该太难写为高效的查询。除此之外,您可能最终想要查询表以进行分析,但这不是该数据库的主要目的。

设计2至少可能意味着您最终会遇到一个非常繁忙的表。

不过,最好的选择是为每个原型创建原型并运行一些测试。构建每个设计选项的原型,并使用一些虚拟数据对不同的操作进行一些性能基准测试。


-3

对我而言,按照您当前的结构,设计2更好。您可以实现分区,优化查询和结构化方式来创建数据库/表,这将减少执行时间。但是某些情况下规范化效果更好,但是完全取决于您的数据库设计体系结构。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.