ホーム > データベーススペシャリスト試験 > 2020年
データベーススペシャリスト試験 2020年 午後1 問03
データウェアハウスに関する次の記述を読んで, 設問1〜3に答えよ。
A社は, 家庭日用品, DIY用品などを販売するホームセンタを,全国の主要都市に展開している。 A社では, RDBMS の機能を用いた販売情報分析システムを運用しており,Fさんがテーブルの設計を見直すことになった。
〔業務の概要〕
(1) A社の営業本部は,全国を 10 地域に分けて販売情報を分析している。
(2) A社の店舗は,全部で300店あり,店舗が一つもない地域はない。
(3) 分析対象の商品は 100,000点あり, 商品分類によって分類される。 商品には,時期と地域によってよく売れるものもあれば、全く売れないものもある。
(4) 商品分類には10個の大分類と200個の小分類がある。 大分類が家庭日用品ならば,小分類の一つは鍋である。 小分類が一つもない大分類, 商品が一つもない小分類はない。商品は,小分類に分類後, その分類が変更されることはない。
(5) 会員には個人会員と法人会員があり, 会員地域コードが設定される。 法人会員には,担当する社員が登録後に1名決められる。 分析対象は 10,000 会員である。
〔見直し前の主なテーブル〕
見直し前の主なテーブル構造を図1に, 主な列の意味 制約を表1に示す。


〔見直しの方針〕
1.テーブルの統合
これまで個人会員及び法人会員に関する情報をそれぞれ別テーブルに記録していたが,販売情報を分析する SQL文を簡素にするため,次のように統合する。
・“個人会員”,“法人会員” テーブルを “会員” テーブルに統合する。
・“個人売上”, “法人売上” テーブルを “売上” テーブルに統合する。
なお,会員番号の付与方法は変えないものとし,また, 統合に伴うテーブルの定義 (列名, データ型, 制約など) の変更は必要最小限とする。
2.サマリテーブルの作成
これまで分析用 SQL 文は,図1中のテーブルを直接アクセスしていたが, 処理時間を改善するため,“売上”テーブルを集計したサマリテーブルを作成する。
〔テーブルの統合 〕
“個人会員”,“法人会員” テーブルに定義されていた制約は, それぞれ表 2,3のとおりであった。


見直し後の“会員”,“売上” テーブルのテーブル構造を, 図2に示す。
Fさんが調べたところ, 既存の会員番号をそのまま移行したのでは不都合が起きることが分かったので, “会員” テーブルに会員区分を追加し、個人会員には 'A' の値を,法人会員には 'B' の値をそれぞれ設定することにした。

Fさんは,次の規則に基づいてテーブル定義表を作成し,テーブルを定義した。
(1) データ型欄には, データ型を記入する。
(2) NOT NULL 欄には, NOT NULL 制約を設定する場合に Y を記入し, そうでなければN を記入する。
(3) 格納長欄には, RDBMS の仕様に従って格納長を記入する。
(4) 索引の種類と構成列欄には, 作成する索引を記入する。
・索引の種類には, P (主キー索引), U (ユニーク索引), NU (非ユニーク索引)のいずれかを記入し、各索引の構成列には構成列の順番に1からの連番を記入する。
・制約欄には,参照制約, 検査制約を, SQL の構文で記入する。
Fさんが作成した見直し後の “会員” テーブルのテーブル定義表を,表4 に示す。

〔見直し後の販売情報の分析〕
販売情報の分析では,例えば, 販売実績が非常に少なかったケースを調べる目的で、次のような分析 (分析 B1) を行っている。 テーブルの設計を見直した後の分析 B1用SQL文の構文を図3に, 実行結果を表5に示す。
分析B1:2020年3月の店舗コード別商品コード別売上額を調べる。ただし、店舗コードはM1,M2及びM3に、商品コードはP1及びP2に限定する。


〔サマリテーブルの作成〕
Fさんが,処理時間の改善を要望された分析用 SQL 文の目的を調べ,最大結果行数を見積もった結果を, 表 6 に示す。 また, 表6中の分析のうち,分析 B2 用 SQL文の構文を、図4に示す。


設問1(1):〔テーブルの統合〕 について,(1)〜(3)に答えよ。
表2, 3中の(a),(b)に入れる適切な字句を答えよ。
模範解答
a:地域(地域コード)
b:社員(社員ID)
解説
キーワード・論点の整理
- 参照制約(外部キー制約)
親テーブルの主キーまたはユニークキーを参照し、一貫性を保つ制約です。書式は
FOREIGN KEY (子テーブルの列) REFERENCES 親テーブル(親列)
- 親テーブルの選定
子テーブル(ここでは“個人会員”/“法人会員”)の列が、どのテーブルの主キーを参照すべきかを判断します。 - 問題箇所
表2・表3中の空欄(a)
,(b)
に、参照先となる「親テーブル名(親列名)」を補う必要があります。
解答:表2・表3
- (a) 地域(地域コード)
- (b) 社員(社員ID)
なぜその解答になるのか
-
図1より、「地域」テーブルには主キーとして 地域コード が定義されており、「地域(地域コード, 地域名, …)」
が示されています。
したがって、会員テーブル側の会員地域コード
は親テーブル「地域」の地域コード
を参照すべきです。 -
同じく図1より、「社員」テーブルには主キーとして 社員ID が定義されています。「社員(社員ID, 社員名, 店舗コード, …)」
法人会員テーブルの担当社員ID
は、その社員を示すキーであるため、
親テーブル「社員」の社員ID
を参照します。
受験者が誤りやすいポイント
- 「地域コード」を持つテーブルは他にも「店舗」「会員」などに出てきますが、参照先は“地域”テーブルの主キーであることを確認する必要があります。
- 「社員ID」を参照するのは“社員”テーブルであり、店舗マスターや会員マスターではありません。
- 外部キー参照先の括弧内には必ず親テーブル側の主キーまたはユニークキーを指定する、という基本ルールを忘れないこと。
試験対策として覚えておくべきポイント
- 参照制約の書式:
FOREIGN KEY (子列) REFERENCES 親テーブル(親列) [ON DELETE ○○]
- 参照先は常に親テーブルの主キーまたはユニークキーであること。
- ER図やテーブル一覧から、どのテーブルのどの列が主キーかを正確に読み取る練習をしておくこと。
- ON DELETE オプション(RESTRICT/SET NULL/CASCADE)は、要件に応じて適切に設定する。
設問1(2):〔テーブルの統合〕 について,(1)〜(3)に答えよ。
会員区分を追加することなく既存の会員番号をそのまま移行すれば,どのような場合にどのような不都合が起きると考えられるか,それぞれ 25字以内で述べよ。
模範解答
場合:個人会員番号と法人会員番号が重複する場合
不都合:会員番号の登録が主キー重複違反で失敗する
解説
キーワードと論点整理
- 「個人会員番号及び法人会員番号の付与は、互いに無関係でそれぞれ独自に行っている」(問題文より)
→ 同じ8桁番号が個人会員と法人会員で重複する可能性 - 会員テーブルの主キーに「会員番号」だけを使うと重複を防げない
- その結果、「主キー重複違反」が発生する
解答の根拠(問題文引用)
- 個人・法人の番号付与方法について:
「個人会員番号及び法人会員番号の付与は、互いに無関係でそれぞれ独自に行っている。」
- 会員区分追加の必要性:
「既存の会員番号をそのまま移行したのでは不都合が起きることが分かったので、“会員” テーブルに会員区分を追加し…」
上記から、もし 会員区分なし で同一番号を移行すると、個人用と法人用で同じ会員番号がテーブル内に存在し、
主キー制約(会員番号の一意性)に違反し 登録が失敗 すると論理づけられます。
主キー制約(会員番号の一意性)に違反し 登録が失敗 すると論理づけられます。
受験者が誤りやすいポイント
- 「会員区分を追加しないと何が困るか」の設問で
→ 「会員区分がないと検索時に区別できない」などと答えやすいが、
本問は 「主キー重複」 という制約違反が起きる点が焦点です。 - 重複の原因は「番号付与が無関係」という文言の読み落とし
試験対策として覚えるべきポイント
- 主キー制約は 一意性 を保証する。
- 異なるエンティティ(ここでは個人会員と法人会員)を同一カラムで区別せずに統合すると、
番号が偶然一致した際に主キー重複エラーとなる。 - 統合テーブルには必ず「区分カラム」を追加し、主キーに含めることで一意性を保つ。
設問1(3):〔テーブルの統合〕 について,(1)〜(3)に答えよ。
表4に示した NOT NULL 欄中の(c)〜(g)及び制約欄中の(h)〜(m)に入れる適切な字句を答えよ。(j, k, lは順不同)
模範解答
c:Y
d:Y
e:N
f:N
g:N
h:RESTRICT
i:SET NULL
j:性別 IN ('M','F')
k:年代 IS NOT NULL
l:担当社員 ID IS NULL
m:年代 IS NULL
解説
キーワード・論点整理
- NOT NULL 制約(必須入力/NULL 許容)の設定
- 参照制約(FOREIGN KEY)の ON DELETE 動作
- チェック制約(CHECK)の条件分岐
- 会員区分('A':個人会員、'B':法人会員)による属性の有無
解答一覧
なぜその解答になるのか
-
会員区分・各属性の NOT NULL 設定(c~g)
- 会員区分 (c):
「Fさんは…“会員”テーブルに会員区分を追加し、個人会員には 'A' …法人会員には 'B'」とあり、必ず値を持つため Y。 - 会員番号 (d):
「個人会員番号、法人会員番号…それぞれ独自に付与」「統合に伴う…変更は必要最小限」とあるので元の NOT NULL を維持し Y。 - 会員地域コード (e):
「会員地域コードが設定される」=全会員に必須。元の両テーブルとも FOREIGN KEY で NOT NULL を前提にしているため Y。 - 性別 (f):
個人会員のみ「性別:男性 ‘M’,女性 ‘F’」が設定される一方、法人会員にはそもそも性別がない。NULL許容で N。 - 年代 (g):
同様に年代も個人会員のみ。法人会員では不要なので N。 - 担当社員 ID (h):
法人会員のみ「担当する社員が…1名決められる」。個人会員では NULL となるため N。
- 会員区分 (c):
-
参照制約の ON DELETE 動作(h,i)
- 会員地域コード → 参照先 a ON DELETE RESTRICT
「FOREIGN KEY 会員地域コード REFERENCES a ON DELETE RESTRICT」(表2,3 より) - 担当社員 ID → 参照先 b ON DELETE SET NULL
「FOREIGN KEY 担当社員ID REFERENCES b ON DELETE SET NULL」(表3 より)
- 会員地域コード → 参照先 a ON DELETE RESTRICT
-
CHECK 制約の条件(j~m)
図表からCHECK式は以下のように2つの OR 節に分岐している。CHECK ( ( 会員区分 = 'A' AND 〈j〉 AND 〈k〉 AND 〈l〉 ) OR ( 会員区分 = 'B' AND 性別 IS NULL AND 〈m〉 ) )
- 会員区分='A'(個人会員)側
・性別は必ず 'M' または 'F' → 性別 IN ('M','F')(j)
・年代は必ず設定 → 年代 IS NOT NULL(k)
・担当社員 ID は使わない → 担当社員 ID IS NULL(l) - 会員区分='B'(法人会員)側
・年代も性別も使わない → 年代 IS NULL(m)
- 会員区分='A'(個人会員)側
受験者が誤りやすいポイント
- NULL 許容/非許容の判断
- 「元テーブルで NULL 許容だったか」をそのまま移行するのではなく、統合後の業務要件(個人会員か法人会員か)から再検討する。
- ON DELETE 動作の混同
- RESTRICT と SET NULL は役割が逆。元定義を正確に把握しないと誤答しやすい。
- CHECK 制約内の AND/OR の組み合わせ
- 会員区分ごとに AND がまとまっていること、括弧位置に注意する。
試験対策として覚えておくべきポイント
- 統合後のテーブルでは各種属性の NULL 許容を業務要件ベースで再設定する。
- FOREIGN KEY の ON DELETE オプション(CASCADE, SET NULL, RESTRICT)は元定義のまま移行する。
- 複雑な CHECK 制約は「会員区分ごとの条件セット」を意識して設計・読み取る。
- 問われている箇所(c)~(m)を整理する際、設問文の該当記述を必ず引用し、論理を明確に説明する練習をする。
設問2(1):〔見直し後の販売情報の分析〕 について,(1),(2)に答えよ。
図3中の(あ)〜(く)に入れる適切な字句を、解答群の中から選び、記号で答えよ。(う、えは順不同、お、か、きは順不同)
解答群
①売上U
②店舗M
③商品S
④U.店舗コード
⑤U.商品コード
⑥M.店舗コード
⑦S.商品コード
⑧U.年 = '2020'
⑨U.月 = '03'
⑩U.商品コード IN('P1','P2')
⑪U.店舗コード IN('M1','M2','M3')
⑫M.店舗コード IN('M1','M2','M3')
模範解答
あ:②
い:①
う:⑥
え:④
お:⑧
か:⑨
き:⑩
く:⑫
解説
キーワード・論点整理
- LEFT OUTER JOIN の利用
店舗テーブルをベースに売上テーブルを外部結合し、売上がない店舗も結果に含める。 - ON句 vs WHERE句のフィルタ
- ON句:結合する行を限定
- WHERE句:最終結果を限定
- NULL処理
- COALESCE による NULL 値の代替(商品コード、販売額・クーポン額)
- エイリアスと結合条件
- 店舗テーブルに
M
、売上テーブルにU
の別名を付与 M.店舗コード = U.店舗コード
で結合
- 店舗テーブルに
解答の根拠
問題文では次の要件を満たす SQL を作成します(引用は原文のまま引用)。
分析B1:2020年3月の店舗コード別商品コード別売上額を調べる。ただし、店舗コードはM1,M2及びM3に、商品コードはP1及びP2に限定する。
図3の雛形は以下のようになっており、(あ)~(く)に適切な字句を埋めます。
SELECT M.店舗コード,
COALESCE( U.商品コード, 'なし' ) 商品コード,
SUM( COALESCE( U.販売額, 0 ) - COALESCE( U.クーポン額, 0 )) 売上額
FROM □あ□
LEFT OUTER JOIN □い□
ON □う□ = □え□
AND □お□
AND □か□
AND □き□
WHERE □く□
GROUP BY M.店舗コード, U.商品コード
各部の対応をまとめると、次のとおりです。
選択肢の検討/誤りやすいポイント
- 結合対象のテーブル
あ に売上U
を誤って入れると、LEFT OUTER JOIN のベースが売上テーブルになり、売上がない店舗を拾えなくなる。 - キーの向き
M.店舗コード = U.店舗コード
の左右を入れ替えると構文エラーではないが可読性・暗黙の結合方向が変わり誤解を招く。 - フィルタの句の選択
U.商品コード IN('P1','P2')
を WHERE 句に入れると、LEFT OUTER JOIN の NULL 行(売上なし)が除外され、店舗 M3 が結果に出なくなる。- 店舗コードの絞り込みは WHERE 句で行っても LEFT OUTER JOIN の前提に影響しないため、正しく WHERE に記述する。
試験対策としてのまとめ
- 外部結合の特性把握
- ON句でフィルタすると、結合行の有無に影響
- WHERE句でフィルタすると、結合後の結果から除外
- NULL 値処理
- COALESCE を使って集計・表示用に NULL を適切に置き換える
- テーブルエイリアスの付け方
- 別名(M, U, C, K など)を統一して見やすく記述
- SQL 分析問題の解き方
- 要件(年・月・店舗・商品などの絞り込み)を ON句/WHERE句に正しく振り分け
- GROUP BY 句に SELECT 句で使用した列を漏れなく記載
これらのポイントを押さえておくと、SQL の穴埋め設問や動作検証問題で安定して正解を導けます。
設問2(2):〔見直し後の販売情報の分析〕 について,(1),(2)に答えよ。
COALESCE 関数は, 1番目の引数が NULL でないときはその値, NULL のときは2番目の引数を返す関数である。 図3 中の選択リスト中の販売額又はクーポン額が NULL になるのはどのような場合か,本文中の用語を用いて,それぞれ25字以内で述べよ。
模範解答
販売額:分析対象の商品が全く売れなかった店舗の場合
クーポン額:分析対象の商品にクーポンを適用しなかった場合
解説
1. 模範解答のキーワードと論点整理
-
COALESCE関数の動作
“COALESCE 関数は, 1番目の引数が NULL でないときはその値, NULL のときは2番目の引数を返す関数である。” -
販売額が NULL になるケース
- 分析 B1 の SQL 文では LEFT OUTER JOIN を使ってすべての「店舗コード×商品コード」の組み合わせを出力しているため、該当する売上明細がない場合に U.販売額 が NULL になる。
-
クーポン額が NULL になるケース
- 問題文より “クーポン額は、会員が広告チラシ又はスマートフォンでクーポンを提示したときに適用した金額で、適用しなかった場合、NULL が設定される。”
2. 解答の論理的説明
2.1 COALESCE関数の役割
問題文にあるとおり、
COALESCE 関数は, 1番目の引数が NULL でないときはその値, NULL のときは2番目の引数を返す関数である。
つまり
COALESCE( U.販売額, 0 )
と書くと、
U.販売額
が NULL のときは 0 を使う、NULL でなければ U.販売額
を返す、という動作になります。2.2 販売額が NULL になる理由
- 図3 の SQL 文は
として LEFT OUTER JOIN を使い、「分析対象のすべての店舗×商品」を網羅します。FROM □あ□ LEFT OUTER JOIN □い□ ON …
- その結果、ある店舗でその商品がまったく売れていなければ、結合先(売上テーブル)に該当行がなく、
U.販売額
に NULL が入ることになります。 - したがって「分析対象の商品が全く売れなかった店舗の場合」に
U.販売額
が NULL になります。
2.3 クーポン額が NULL になる理由
-
問題文の定義より“クーポン額は…適用しなかった場合、NULL が設定される。”
-
すなわち、会員がクーポンを提示しなかった取引では、売上テーブルの
U.クーポン額
が NULL になります。 -
後段で
COALESCE( U.クーポン額, 0 )
を使うことで、NULL の場合には 0 を適用し、実額計算を正しく行っています。
2.4 まとめ表
3. 受験者が誤りやすいポイント
- 販売額に NULL が入らないと誤解
データ自体の制約で販売額
が NOT NULL だと思い込み、外部結合による NULL 発生を見落としがちです。 - クーポン額の NULL 条件を混同
「クーポンを適用しなかった場合」が NULL になる、という仕様を押さえずに COALESCE を使う理由を理解できないことがあります。
4. 試験対策として覚えておくべきポイント
- COALESCE の基本動作と NULL を置き換える意義
- 外部結合(LEFT OUTER JOIN)では結合先がない行に NULL が入ること
- 問題文にある「NULL が設定される場合」の文言は必ずそのまま引用して理解すること
- 集計・計算時は COALESCE を使って NULL を扱いやすい値に変換するパターンが多いこと
これらを押さえておくと、SQL の集計・外部結合に関する問題でも迷わず正解できます。
設問3(1):〔サマリテーブルの作成〕 について,(1),(2)に答えよ。
表6中の(イ)〜(ハ)に入れる適切な字句を答えよ。
なお、結果行数を見積もるとき, 分析対象の期間中、現在の店舗コード, 店舗地域コード, 小分類コード, 大分類コード, 商品コード, 会員番号及び会員地域コードの数に変動がなかったと仮定すること。
模範解答
イ:200
ロ:36,000
ハ:4,200
解説
模範解答のキーワード・論点整理
以下の3つの小問は,いずれも「最大結果行数」を見積もる問題であり,
「分析の対象期間」×「GROUP BY に含まれる項目の組み合わせ数」を掛け合わせて求めます。
「分析の対象期間」×「GROUP BY に含まれる項目の組み合わせ数」を掛け合わせて求めます。
解答に至る論理的な説明
-
【前提】「分析対象の期間中、現在の店舗コード, 店舗地域コード, 小分類コード, 大分類コード, 商品コード, 会員番号及び会員地域コードの数に変動がなかったと仮定すること。」この文言により,それぞれのコード数は固定値として計算できます。
-
B3 の計算
〈問題文より〉「分析名:B3 2020年3月と2019年3月の店舗地域コード別大分類コード別売上額」- 店舗地域コードの種類数 = 10 (「全国を 10 地域に分けて販売情報を分析している」)
- 大分類コードの種類数 = 10 (「商品分類には10個の大分類がある」)
- 期間の月数 = 2 (2020年3月,2019年3月の2か月)
したがって10 × 10 × 2 = 200
イ:200 -
B4 の計算
〈問題文より〉「分析名:B4 2019年の月別店舗コード別大分類コード別売上額」- 月数 = 12 (「2019年の月別」)
- 店舗コードの種類数 = 300 (「店舗は,全部で300店」)
- 大分類コードの種類数 = 10
したがって12 × 300 × 10 = 36,000
ロ:36,000 -
B5 の計算
〈問題文より〉「分析名:B5 個人会員について2020年3月の店舗コード別性別年代別売上額」- 期間の月数 = 1 (2020年3月)
- 店舗コードの種類数 = 300
- 性別の種類数 = 2 (男性M・女性F)
- 年代の種類数 = 7 (「年代には…20歳未満:1、…70歳以上:7」)
したがって1 × 300 × 2 × 7 = 4,200
ハ:4,200
誤りやすいポイント
-
「店舗地域コード」と「店舗コード」の混同
B3 は「店舗地域コード別」,B4/B5 は「店舗コード別」です。種類数(10 vs 300)がまったく異なるため注意。 -
期間の把握ミス
B3 → 2か月,B4 → 12か月,B5 → 1か月。月数を見落とすと桁が大きくずれます。 -
年代の種類数
「年代には…7」と明示されていますが,「20歳代・30歳代…」といった名称だけ覚えていて数を勘違いしやすい点。
試験対策として覚えておくべきポイント
-
GROUP BY のキー項目数を正確に抜き出す
分析名の文章から「○○別」というグルーピング条件を一つずつピックアップする。 -
各コード・分類の総数を確認
問題文序盤に示される「全国を10地域」「店舗は300店」「大分類10件」「年代7件」などは,集計行数を決める基本情報です。 -
対象期間の把握
「2019年の月別」→12か月,「2020年3月と2019年3月」→2か月,「2020年3月」→1か月,など,期間の長さを確実に読み取る。 -
掛け算で行数を見積もる
行数=(期間の単位数)×(各グルーピング項目の種類数)の積として計算することを習慣づける。
設問3(2):〔サマリテーブルの作成〕 について,(1),(2)に答えよ。
図1 中の “個人売上”, “法人売上” テーブル以外のテーブルを総称して,次元テーブルという。 表 6 中の全ての分析について,次元テーブルと一つのサマリテーブルだけから売上額を集計できるようにしたい。 F さんは,サマリテーブルの候補のうち, 最小列数かつ最小行数となるサマリテーブル “S” のテーブル構造を,次のように設計した。 A に入れる複数の列名を答えよ。 ただし, 列名は次元テーブルから選ぶこと。
S(年, 月, 店舗コード, 会員区分、会員地域コード,(A), 売上額)
模範解答
A:性別, 年代, 小分類コード
解説
解説のポイント整理
- テーマ:次元テーブルとサマリテーブルを組み合わせ,表6の分析(B2~B6)をすべてサポートする最小のサマリテーブル構造を設計する
- サマリテーブル S の定義
S(年, 月, 店舗コード, 会員区分, 会員地域コード, (A)…, 売上額) - 求める A の列
„性別“, „年代“, „小分類コード“
なぜ「性別, 年代, 小分類コード」なのか
表6の各分析がグルーピングや絞り込みにどの列を必要とするかを確認します。
- B2(四半期名別 会員区分別 会員地域コード別)
- サマリに「年」「月」を持たせることで,図4のカレンダ次元と結合し「四半期名」を取得可能
(問題文「B2:2019年の四半期名別会員区分別会員地域コード別売上額」,図4参照)
- サマリに「年」「月」を持たせることで,図4のカレンダ次元と結合し「四半期名」を取得可能
- B3/B4(大分類コード別)
- サマリに「小分類コード」を持つと,次元テーブル「小分類」→「大分類」への参照で「大分類コード」を導出できる
(問題文「B3:…大分類コード別売上額」「B4:…大分類コード別売上額」)
- サマリに「小分類コード」を持つと,次元テーブル「小分類」→「大分類」への参照で「大分類コード」を導出できる
- B5(性別・年代別)
- 個人会員の分析で「性別」「年代」によるグループ化が必要
(問題文「B5:…店舗コード別性別年代別売上額」)
- 個人会員の分析で「性別」「年代」によるグループ化が必要
- B6(小分類コード別)
- 直接「小分類コード」で集計
(問題文「B6:…年月別小分類コード別売上額」)
- 直接「小分類コード」で集計
以上より,すべての分析を次元テーブルとサマリテーブル S(年, 月, 店舗コード, 会員区分, 会員地域コード, 性別, 年代, 小分類コード, 売上額) の組み合わせのみで実現でき,A に含める列は
性別, 年代, 小分類コード
となります。
受験者が誤りやすいポイント
- 大分類コードを直接持たせる
大分類単位の分析があるからと大分類コードを持たせると,B6(小分類単位集計)ができず,小分類から大分類を導出する柔軟性も失われます。 - 商品コードを持たせる
小分類コードより粒度の細かい商品コードを持つと行数が増大し,サマリテーブルが大きくなるため不適切です。 - 会員区分だけで済むと思う
法人会員には「性別」「年代」が存在しないため,個人会員分析(B5)を行えません。
試験対策として覚えておくべき知識
- サマリテーブル設計では,必要最小限のキー列を選び,かつその粒度が最も細かい次元を選択し,上位粒度は次元テーブルから導出する。
- データウェアハウスでは,「最低粒度(最小単位)のキー」を保持し,「上位粒度の情報は次元テーブル結合で取得」するのが原則。
- 各分析がグルーピングに用いる列を洗い出し,すべてをカバーする最小の列集合を求める演習を繰り返す。
サマリテーブル S のイメージ
- A に該当する列:性別, 年代, 小分類コード