【问题标题】:SQL Schema Design: individual tables or mass table ScalabilitySQL Schema 设计:单个表或海量表
【发布时间】:2013-01-24 13:41:51
【问题描述】:

就可扩展性而言,更有效的架构设计方法是什么?

如果一个数据库有多个用户,并且每个用户都有对象(由长文本、日期和唯一 ID 中的数据组成),是否更有效 (1) 创建一个对象的质量表,每个对象都有一个用户列,或者 (2) 为每个用户创建单独的对象表?

我在研究时看到了相互矛盾的答案,数据库规范化说要为每个用户创建单独的列,而一些帖子提到使用海量表可以提高性能。

编辑:为了清楚起见,将“元素”更改为“对象”。

【问题讨论】:

  • “元素”是什么意思?你的意思是像物理/化学概念吗?或者您是否有其他数据元素?您需要存储哪些类型的用户信息和其他数据?可能您会希望在某些表格中使用 userId 列,但我们需要更多信息。
  • 元素只是一个包含长文本、日期和唯一 ID 的对象。我编辑了我的帖子以使其更清楚。

标签: sql database-design optimization schema scalability


【解决方案1】:

一般来说,您希望为一个实体创建一个表,而不是为用户将它们分成单独的表。

这使系统更易于维护。系统上的查询在所有应用程序中都是一致的。它还以数据库为访问数据而优化的方式构建数据。

在一些特殊情况下,您会将用户数据拆分到单独的表甚至单独的数据库中。这可能是用户要求(“我们的数据不能与其他任何人混合”)。它可能需要支持各种备份和安全策略。但是,一般的方法是围绕实体而不是围绕用户来设计表格。

【讨论】:

    【解决方案2】:

    拥有一个带有一列来识别用户的表是正确的关系设计。添加用户时必须添加表听起来很可疑,一旦拥有大量用户,可能会导致问题。

    当单个表变得太大时,大多数数据库产品都支持所谓的分区,它允许根据某些标准将单个逻辑表拆分为磁盘上的多个物理表(例如,为了保持您的示例,您可以拥有三个分区 1 中的用户 ID 为 1 - 99999、分区 2 中的数据为 100000 - 199999 和分区 3 中的数据为 200000 - 299999 的物理表。

    这是Oracle 的概述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 2011-11-06
      • 2017-05-13
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多