スタースキーマ
データベースモデル |
---|
基本的なモデル |
階層 |
ネットワーク |
関係 |
オブジェクト関係 |
オブジェクト |
その他のモデル |
多次元 |
スタースキーマ |
XMLデータベース |
列指向 |
Associative |
Concept-oriented |
スタースキーマ または 星型スキーマ はデータウェアハウスに利用される最も単純なスキーマである。スタースキーマには唯1つもしくは少数のファクト表と複数のディメンション表が含まれる。スタースキーマはスノーフレークスキーマの一種であるが、多くの用途で利用されている。
モデル
[編集]ファクト表はデータウェアハウスでの解析で利用され、複数の異なるディメンションに区分される。ファクト表は主要なデータを持つ一方、ディメンション表は相対的にサイズが小さくディメンションのそれぞれの値を表現する。必要に応じて、ディメンション表はファクト表と結合される。
ディメンション表は単純な主キーを持つ一方、ファクト表の主キーは関連するディメンション・キーを組み合わせた複合キーである場合もある。
ディメンション表に冗長なデータを含ませ、第2正規形に留めておくことは一般的である。一方ファクト表は、全てのデータはディメンションの組み合わせではなく、いずれかの唯1つのディメンションのみに含まれるため、第3正規形を用いることが多い。
スタースキーマは関係データベースを利用した多次元データベースの実装の一種である。典型的な関係データベースを利用できるため、専用の多次元データベースを用いるよりも、価格や利便性の面で利点がある。また、スタースキーマはスノーフレークスキーマの一種ではあるが、1つのファクト表と階層構造のないディメンション表を用いる限りにおいては、クエリを単純化できる。
例
[編集]例として、売り上げ管理データベースを挙げる。チェーン店からの売り上げを、日付、店舗、商品によって分類している。Fact_Sales
はファクト表であり、3つのディメンション表 Dim_Date
, Dim_Store
, Dim_Product
がある。
それぞれのディメンション表は Id
列を主キーとし、Fact_Sales
の3列から成る複合主キー (Date_Id
, Store_Id
, Product_Id
) に対応する。ファクト表の主キーには含まれない Units_Sold
列は、集計や計算に利用される値である。ディメンション表の主キーには含まれない列 (Dim_Date
の Year
等) は、ディメンションの追加の属性である。
以下のクエリは、1997年の、ブランドと国別に集計した、テレビセット (tv) の販売数を計算している。
SELECT
P.Brand,
S.Country,
SUM (F.Units_Sold)
FROM
Fact_Sales F
INNER JOIN Dim_Date D
ON F.Date_Id = D.Id
INNER JOIN Dim_Store S
ON F.Store_Id = S.Id
INNER JOIN Dim_Product P
ON F.Product_Id = P.Id
WHERE
D.Year = 1997
AND
P.Product_Category = 'tv'
GROUP BY
P.Brand,
S.Country