2013-02-08 69 views
1

在可伸缩性方面更有效的模式设计方法是什么?SQL架构设计:单个表或质量表可扩展性

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

我见过的研究,当冲突的答案,数据库规范化说,使各列的每一个用户,而一些帖子提到,性能提高使用质量表。

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

+1

“元素”是什么意思?你的意思是像物理/化学概念吗?或者你有其他的数据元素吗?你需要存储什么类型的用户信息和其他数据?可能你会在你的某些表中想要一个'userId'列,但是我们需要更多的信息。 – 2013-02-08 18:06:42

+0

元素只是一个持有longtext,日期和唯一id的对象。我编辑我的帖子,使其更清晰。 – 2013-02-08 21:23:24

回答

2

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

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

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

1

拥有一个带有列标识用户的表是正确的关系设计。添加用户时添加表格听起来非常可怕,并且一旦拥有大量用户,可能会导致问题。

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

这里是Oracle的概述。