对于有用户的网站。每个用户都有能力创建任意数量的,我们称之为“posts”:
效率方面-是为所有帖子创建一个表,为每个帖子保存创建帖子的用户id,还是创建不同的 桌子 对于每个用户,只放置该用户创建的帖子?
你的第一个提议 user 单身 post 桌子是标准的方法。
user
post
目前,posts可能是站点上唯一一个特定于用户的功能,但是想象一下,它可能需要在将来增长,以支持用户拥有消息、首选项等。现在,您的按用户划分表的方法导致需要创建的表数量激增。
如果性能是一个问题,您应该了解数据库索引。虽然索引不是sql标准的一部分,但几乎所有数据库都支持索引以帮助提高性能。
我建议您为所有用户的帖子创建一个表,然后向该表添加索引以提高搜索性能。例如,可以在 user 列,以便您可以快速查找给定用户的所有文章。根据应用程序的要求,您可能还需要考虑添加其他索引。
具有不同表数的模式通常是错误的。用一张桌子写你的帖子。
很好地回答了一个具体的问题:就查询效率而言,拥有小表总是更好的,因此每个用户一个表可能是最有效的。
但是,除非你 很多 对于帖子和用户来说,这不太重要。即使有数百万行,使用位置良好的索引也会获得良好的性能。
我强烈建议不要使用表/用户策略,因为它会给您的解决方案增加很多复杂性。当你需要查找,比如说,在一年内发布过某个主题的用户时,你会如何查询?
需要时进行优化。不是因为你担心事情会变慢。(即使需要优化,也会有比每个用户的表更简单的选项)
当您向数据库中添加更多数据时,数据库布局不应更改,因此用户数据肯定应该在一个表中。
也:
拥有多个表意味着您必须动态创建查询。
一个表的缓存查询计划不会用于任何其他表。
在一个表中包含大量数据不会对性能产生多大影响,但包含大量表会产生多大影响。
如果要向表中添加索引以加快查询速度,则在单个表上执行该操作要容易得多。