什么更好:拥有许多相似的数据库,还是一个拥有相似表格的数据库,还是一个只有一个表格的数据库?

4
我需要处理多个数据样本,也就是说,N。这些样本代表着相似的数据但来自不同渠道,例如不同商店中的订单历史记录。因此,所有样本的结构都相同。为了操作这些数据,我有几种可能性:
  1. 使用具有相同模式的N个数据库,每个样本一个数据库。

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

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

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

所以你会建议哪种方式呢?性能非常重要。

3个回答

5

步骤1. 获取一本与数据仓库相关的书籍,因为这是你正在做的事情。

步骤2. 将数据分成事实(可测量的事物,如金额、重量等)和维度(不可测量的属性,如产品名称、订单号、用户名称等)。

步骤3. 建立一个事实表(例如订单项),并围绕该事实建立维度。订单项的产品、订单项的客户、订单项的订单号、订单项的日期等等。这将是一个事实表和多个维度表组成的单个数据库。每个“来源”或“源”只是基本事实的一个维度。

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

这是业务处理中性能最高、可扩展性最强的方式。购买 Ralph Kimball 的数据仓库工具包书籍以获取更多详细信息。

不要建立具有相同结构的 N 个数据库。只建立一个用于测试,另一个用于生产,但不要建立 N 个。

不要建立具有相同结构的 N 个表。这就是键的作用。


步骤2和3:还有商业机构提供这种解决方案。 - R van Rijn

2
这是一个例子。在这个例子中,事实表的每一行都有一个订单的条目。可以使用“OrderID”字段来查找特定订单的所有条目。 sales_model_03

1

如果你将数据库分开,你会得到更小的表格。通常这样做可以提高性能。 如果你需要访问另一个数据库,使用Microsoft SQL Server是可行的。如果你需要访问另一台服务器上的数据库,也是可以的。

这取决于数据之间的相关性有多强。


不同样本中的数据之间没有依赖关系。每个样本都是独立的。但是...如果有100个数据库呢?这样可以吗? - flashnik
这取决于:服务器有多少RAM,有多少台服务器,有多少人访问每个数据库,每秒读/写次数有多少,以及他们可用的带宽有多少。通过建议几个数据库,我已经猜测到每个样本将有几百兆字节的数据。如果每个样本只使用50-100兆字节的数据库空间,则应坚持使用一个数据库,并像您提到的那样添加一个带有每个样本ID的表,以使生活更轻松。 - Trevoke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接