【问题标题】:What is better: to have many similar databases or one database with similar tables or one database with one table? [closed]哪个更好:有许多相似的数据库或一个具有相似表的数据库或一个具有一个表的数据库? [关闭]
【发布时间】:2010-01-22 18:12:40
【问题描述】:

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

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

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

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

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

那么你会建议哪种方式?性能很重要。

【问题讨论】:

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


    【解决方案1】:

    第 1 步。买一本关于数据仓库的书——因为这就是你正在做的事情。

    第 2 步。将您的数据划分为事实(可衡量的东西,如美元、重量等)和维度(不可衡量的属性,如产品名称、订单号、用户名等)

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

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

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

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

    不要建立 N 个结构相同的表。这就是钥匙的用途。

    【讨论】:

    • 第 2 步和第 3 步:也有商业方提供这种解决方案。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      这取决于数据的相关性。

      【讨论】:

      • 不同样本数据之间不存在依赖关系。每个样本都独立于其他样本。但是...如果有 100 个数据库怎么办?没事吧?
      • 这取决于:服务器有多少内存,有多少服务器,有多少人在访问每个数据库,每秒读/写次数,有多少可用带宽。通过建议几个数据库,我已经猜到每个样本将有数百兆字节的数据。如果每个样本只使用 50-100 兆的数据库空间,那么坚持使用一个数据库并让您的生活更轻松,正如您所提到的,只需为每个样本添加一个带有 id 的表。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 2010-11-25
      相关资源
      最近更新 更多