什么是更好的:拥有许多类似的数据库或一个具有相似表的数据库或一个具有一个表的数据库?

时间:2010-01-22 18:12:41

标签: sql database database-design sql-server-2008 partitioning

我需要处理几个数据样本,比如N。样本代表相似的数据,但来自不同的来源。例如,不同商店的订单历史。所以所有样本的结构都是一样的。为了操作数据,我有几种可能性:

  1. 使用相同的N个数据库 架构,每个样本一个

  2. 使用一个数据库,但N个表集。例如,User_1,...,User_N; Product_1,...,Product_N,Order_1,...,Order_N等。

  3. 将一个数据库与一组表User,Product,Order一起使用,但向每个表添加一个表示样本索引的辅助列。显然,这一栏应该是一个索引。

  4. 最后一个变体似乎是最方便使用的,因为所有查询都变得简单。在第二种情况下,我需要将一个表名发送给查询(存储过程)作为参数(是否可能?)。

    那么你建议哪种方式?表现非常重要。

3 个答案:

答案 0 :(得分:5)

步骤1.获取有关数据仓库的书籍 - 因为这就是您正在做的事情。

步骤2.将数据划分为事实(可衡量的事物,如$,重量等)和维度(不可衡量的属性,如产品名称,订单号,用户名等)

步骤3.构建由该事实的维度包围的事实表(例如,订单项)。订单商品的产品,订单商品的客户,订单商品的订单编号,订单商品的日期等等。这将是一个事实表和单个数据库中的多个维度表。每个“起源”或“来源”只是基本事实的一个维度。

步骤4.使用非常简单的“SELECT SUM()GROUP BY”查询来汇总和分析您的数据。

这是业务性能最高,可扩展性最高的方式。购买Ralph Kimball的数据仓库工具包书籍了解更多详情。

不要构建具有相同结构的 N 数据库。为TEST构建一个,为PRODUCTION构建一个,但不构建 N

不要构建具有相同结构的 N 表。这就是关键所在。

答案 1 :(得分:2)

这是一个例子。示例中事实表的每一行都有一个订单项。 OrderID字段可用于查找特定订单中的所有商品。

sales_model_03

答案 2 :(得分:1)

好吧,如果你分开数据库,你会有更小的表。这通常更高效。 如果您需要访问其他数据库,则可以使用Microsoft SQL Server。如果你需要访问另一台服务器上的数据库,那也是可能的。

这取决于数据的相关程度。