对于拥有用户的网站。每个用户都有能力创建任何数量的,我们称之为“帖子”:
效率方面 - 最好为所有帖子创建一个表,为每个帖子保存创建帖子的用户的用户ID - 或创建不同的单独表对于每个用户,只放置该用户创建的帖子?
答案 0 :(得分:29)
当您向其添加更多数据时,数据库布局不应更改,因此用户数据肯定应位于一个表中。
此外:
拥有多个表意味着您必须动态创建查询。
一个表的缓存查询计划不会用于任何其他表。
在一个表中包含大量数据不会对性能产生太大影响,但会有很多表。
如果您想为表格添加索引以加快查询速度,那么在单个表格上进行搜索会更容易。
答案 1 :(得分:10)
回答具体问题:在查询效率方面,拥有小表总是更好,因此每个用户的表可能是最有效的。
但是,除非你有很多的帖子和用户,否则这不太重要。即使拥有数百万行,您也可以通过良好的索引获得良好的性能。
我强烈反对每用户表策略,因为它为您的解决方案增加了很多复杂性。当您需要查找在一年内发布主题的用户时,您将如何查询?
在需要时进行优化。不是因为你认为/害怕某些事情会变慢。 (即使你需要进行优化,也会有比每个用户更容易的选项)
答案 2 :(得分:5)
具有不同数量的表的模式通常是坏的。为帖子使用一个表格。
答案 3 :(得分:4)
如果需要考虑性能,则应了解数据库索引。虽然索引不是SQL标准的一部分,但几乎所有数据库都支持它们以帮助提高性能。
我建议您为所有用户的帖子创建一个表,然后向此表添加索引以提高搜索性能。例如,您可以在user
列上添加索引,以便快速查找给定用户的所有帖子。您可能还需要考虑添加其他索引,具体取决于您的应用程序的要求。
答案 4 :(得分:4)
您的第一个建议是拥有一个user
和一个post
表是标准方法。
目前帖子可能是您网站上唯一的特定于用户的功能,但想象一下它可能需要在将来增长,以支持拥有消息,偏好等的用户。现在,您的单独的每用户表单方法引导您需要创建的表格数量激增。
答案 5 :(得分:0)
我对您的回答有一个相似但不同的问题,因为@guffa和@driis都假定“帖子”需要在用户之间共享。
在我的特定情况下:出于隐私原因,不能与任何其他用户共享单个用户数据点,甚至无法进行分析。
我们计划使用mysql或postgres,这是我们团队正在考虑的三个选项:
N个模式和5个表-我们的一些开发人员认为这是使数据完全隔离的最佳方向。 优点-如果您将架构视为文件夹而将表视为文件,则复杂度会降低。每个用户只有一个架构 缺点-大多数ORM都按模式进行连接池
1个架构和nx5个表-一些开发人员之所以这样,是因为它允许连接池,但似乎使问题更加复杂。 优点-在ORM中可以建立连接池 缺点-无法找到为此设置了模型的ORM
1个架构和5个表-一些开发人员之所以这样,是因为他们认为我们受益于缓存。
优点:ORM很高兴,因为这是他们的目的 缺点:每个查询都需要用户名表
我个人以营地1:n模式着陆。 我的主要开发人员进入了营地3:1模式5表。
缓存: 如果数据始终为1:1,则无论使用哪种解决方案,我都看不到缓存将如何提供帮助,因为每个用户都将搜索不同的信息。
有什么想法吗?