SQL架构设计:单个表或质量表可伸缩性

时间:2013-02-08 17:55:43

标签: sql database-design optimization schema scalability

在可扩展性方面,什么是更有效的模式设计方法?

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

我在研究时看到了相互矛盾的答案,数据库规范化表示要为每个用户创建单独的列,而有几篇文章提到使用质量表可以提高性能。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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

以下是Oracle的概述。