首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 資料倉庫核心概念:事實表與維度表設計指南

     編輯:關於SqlServer

星狀結構是資料倉庫最經典的模型,核心在於 事實表 與 維度表 的清晰分工。

事實表

  • 儲存 可量測的業務事件數值 (銷售金額、數量、成本、餘額)。
  • 特徵:極大筆數、窄欄寬、以數值為主、含多個外鍵 連結維度表。
  • 度量值分類:
    • 可加性:可跨任意維度 SUM (銷售額、數量) — 最有價值。
    • 半加性:僅跨部分維度可加 (庫存餘額可跨商品加、不可跨時間加)。
    • 不可加性:不可直接 SUM (比率、單價、溫度) — 需用 AVG/加權平均。
  • 不存描述性屬性 (如客戶名稱、商品名稱),僅存外鍵與度量。

維度表

  • 提供 分析切入點 (切片/切塊) 的描述性屬性 (客戶、商品、時間、門市、促銷)。
  • 特徵:筆數較少、欄寬較寬、含層級結構 (年→季→月→日、國家→城市→門市)。
  • 主鍵通常為 代理鍵,隔離業務鍵變更影響。
  • 常見維度:時間、客戶、商品、地理、組織、情境 (促銷/活動)。

星狀結構圖解

        [Dim_Time]      [Dim_Customer]      [Dim_Product]
           |                 |                   |
           v                 v                   v
      +-----------------------------------------------+
      |              Fact_Sales                       |
      |  TimeKey | CustKey | ProdKey | Amt | Qty | ...|
      +-----------------------------------------------+
           ^                 ^                   ^
           |                 |                   |
        [Dim_Store]      [Dim_Promotion]      [Dim_Geography]

設計原則

  1. 事實表 = 關注焦點 (What):業務度量。
  2. 維度表 = 觀察角度 (How/Where/Who/When):分析切入面。
  3. 單一事實表可連結多維度表;同一維度表可被多事實表共用 (一致性維度)。
  4. 代理鍵 + 緩慢變維 (SCD Type 1/2/3) 處理維度屬性變更。

實務範例:銷售事實表 DDL

CREATE TABLE Fact_Sales (
    DateKey      INT NOT NULL REFERENCES Dim_Date(DateKey),
    StoreKey     INT NOT NULL REFERENCES Dim_Store(StoreKey),
    ProductKey   INT NOT NULL REFERENCES Dim_Product(ProductKey),
    CustomerKey  INT NOT NULL REFERENCES Dim_Customer(CustomerKey),
    PromotionKey INT NOT NULL REFERENCES Dim_Promotion(PromotionKey),
    SalesAmount  MONEY NOT NULL,
    SalesQty     INT NOT NULL,
    CostAmount   MONEY NOT NULL,
    CONSTRAINT PK_Fact_Sales PRIMARY KEY (DateKey, StoreKey, ProductKey, CustomerKey, PromotionKey)
);

結語

「事實表存數字,維度表存描述」是星狀建模的黃金法則。嚴守此分工,配合代理鍵與層級設計,即可構建高效能、易擴展、業務語意清晰的資料倉庫基礎模型。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved