データベーススペシャリスト資格|2022年10月挑戦ログ 6月15日|DB基礎知識(データモデルと専門用語)|SQL(確認ドリル,ウィンドウ関数 rank)

高度IT・基礎知識

この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。

今回は知識(データモデルと専門用語)およびSQL(確認ドリル)について書く。

※この記事のSQLはGoogle Big Queryに準拠

知識(学習のしかた)

前回おさらい

  • データベーススペシャリスト資格について「そもそも何?」「大事なポイントは?」「何の役に立つの?」は過去記事にてまとめ済
  • 本試験について過去問ベースの学習を進めていく。

データベース設計のやり方

  • 現代において業務を改善するには、データベース(データのまとまり)が必要。なぜなら、扱うデータが大量・多様なので。
  • データベースを設計するには、対象世界(業務の流れと扱うデータの全量)をよく見て、「モデリングによる見える化」が必要。なぜなら、漏れを防ぎ、整合性を保ち、情報を共有するため
  • モデリングによる見える化は、まず概念レベルでおこなう。ここで出来上がるものを概念データモデルと呼ぶ。表記手法でもっとも一般的なのがER図だ。試験でもこれが用いられる。ここまでの工程を論理設計と言う。
  • なお、概念データモデルをリレーショナルデータベース(行と列からなる表で管理するデータベース)で実際に実装する際の設計図を論理データモデルと呼ぶ。それに基づき実際にハードウェア構成など決めることを物理設計と言う。
  • ここで大事なのは、「対象業務⇒論理設計⇒物理設計」というデータベース設計のやり方と、試験ではまず論理設計はしっかり抑える必要があること。

専門用語の対処法

  • データベース試験では専門用語が多様される。たとえば「関係」「属性」「射影」など。
  • 理由は大きく2つ。まず、そもそもデータベースの世界が抽象概念で、言葉で表すのは非常に難しく、ゆえに数学的な概念(集合など)を用いるから。次に、試験の目的が専門家の資質を見るものなので、あえて一般にはわかりにくい専門用語で知識を測りたいから
  • ただ、抽象的過ぎては使えないので、具体的に分かりやすくする必要がある。たとえば「関係」をわかりやすくしたものが「行と列からなる表」である。
  • つまり、専門用語の本質を数学的に理解する必要はなく、試験においては「関係Aに属性a,b,c」があり…と出てきたら、「関係とは表のことだな」「属性とは列のことだな」と読み替えできれば良い。
  • これは学習効率という意味で、極めて大事なポイント。たとえばSQLのselectは射影と呼ぶが、数学的には凄く奥深い概念。だがこと試験においては、この概念の深堀は不要で、ただ「射影とはselectのことだ」でok。

関係データモデル

  • データのまとまりは行と列からなる表形式のテーブルで管理する。テーブルは関係または表とも呼ぶ。
  • 縦の列は属性とも、横の行はタプルとも、一つのセルの値はドメインとも呼ぶ。
  • なお、表形式の内容を全て記述すると煩雑なので、表名と列名のみ記した表の骨格を関係スキーマと言う。たとえば「商品(商品番号、商品名、単価)」のように。
  • なお、関係スキーマには試験の記述ルールがあり、これは事前に抑えておき、体になじませる必要がある。問題冊子の「関係スキーマの表記ルール」参照。
  • これを少しでも雑に書くと試験で点はもらえない。「関係名が無い」「属性を()で括ってない」「属性をカンマで区切ってない」
  • インプットだけでは体得しづらいので、アウトプットを有効活用するとよい。たとえば第三者サービスによるテストなどだ。(実力テストや模試)

試験問題イメージ

  • 3層スキーマ構造について。利用者から見える外部スキーマ、論理データモデルをDBMSに沿って記述した概念スキーマ、物理的な枠組みを示した内部スキーマがある。要点は、論理設計を「概念スキーマ」として物理設計と切り離しつつ、ER図など用いてわかりやすく記述する点。(H29問1)
  • 対象世界を抽象化したものが概念データモデル(ER図等)。それをDBMS向けにしたものが論理データモデル(階層、ネットワーク、関係等)。これらはプロセスでなく、データに着目したアプローチ。要点は、概念データモデルの目的と位置づけ。(H26問1)

9月22日復習時追記

  • 午前を中心に、ここに記載の対策は完了している。
  • 概念データモデルや論理設計の「考え方そのもの」の出題は午前2で数問レベルであり、対策済。
  • 「専門用語への慣れ」はアウトプット練習により、定着済。

問題036(SQL確認ドリル)

問題文

  • 「sales」テーブルから、もっとも高額な「revenue」が記録されているレコードの
  • 「order_id」「user_id」「revenue」を取得してください。
  • (なお、もっとも高額なrevenueのデータは一つのみの前提とします)

order by,limit,selectのおさらい

  • order byは並び替えをおこなう。ascが昇順、descが降順。limitは表示数を制限する。
  • selectでは取得したい列を指定する。
  • 今回はこれらを組み合わせ、以下のとおり。

問題036の別パターン

きっかけ

  • たいへんありがたいことに、twitterのフォロワー様からお題をいただいたため、追記
  • 以下、太字部分が追加のお題(条件)

問題文

  • 「sales」テーブルから、もっとも高額な「revenue」が記録されているレコードの
  • 「order_id」「user_id」「revenue」を取得してください。
  • なお、最も高額なレコードが2レコード以上ある場合でも、それを1回で取得するよう記述してください。(色々書き方はありますが、分析関数を使って書けたらなお良いかと)

サブクエリを用いる場合

  • いったんもっとも高額な値を取り出し、これを1行1列のリストとしてサブクエリにする。(以下、赤枠)
  • これと同額なデータ(行)をwhere句で取得するSQLにする。結果は以下のとおり。

ウィンドウ関数について

ウィンドウ関数とは

  • 分析関数やOLAP関数とも呼ぶ。
  • 元の表を保持したまま、柔軟な集計ができるのが最大の特徴。
  • たとえば以下のとおりgroup byとmax関数を用いて、商品カテゴリごとの最大販売額を集計したとする。結果は以下のとおり、商品カテゴリで束ねられた表になる。
  • つまり単純なグループ化と集計だと、元の表は残らない。
  • いっぽう、ウィンドウ関数を用いると(以下、赤枠部分)、「商品カテゴリごとの最大販売額」を求めたうえで、元の表の形を維持したたま集計結果が追加されているのがわかる。
  • たとえばユーザid 10059の人(行1~3)につき、商品カテゴリ1の最大販売額8,000円、カテゴリ2の最大販売額8,800円などがくっついている(以下、青枠部分)のがわかる。

ウィンドウ関数の記述

  • 最も基本なのは「関数名 over (partition by フィールド名)」。上の例では、”関数名”にmax関数、”フィールド名”に商品カテゴリ(product_id)を指定している。
  • partitionはパーティションと読む。「何ごとに集計したいのか?」に該当する部分
  • このほか、()内にはorder byやwindowフレームなど指定可(詳細は後述)

ウィンドウ関数の例 rank関数

  • rank関数はその名のとおりランキングを付けられる。
  • 記述例は「rank() over (partition by 集計基準項目 order by 並び替え基準項目)」
  • たとえば単純に「販売金額の高い順ランキング」にしたい場合。まず”partition by 集計基準項目”は省略(集計しない、素の販売金額ランキングなので)。次に”order by 並び替え基準項目”には販売金額(revenue)を指定し、高い順なので降順(desc)を指定する。
  • 結果は以下のとおり。rank関数(赤枠)を用いた結果、たとえばユーザid 10059の人(青枠)の販売金額ランキングがわかる(緑枠)。

問題036の別解

  • たとえばrank関数を用いて、問題036(最も高額なrevenueレコード取得。複数ある場合も1回のSQLで取得)を解いてみる。
  • 考え方としては、まずrank関数でランキングをつけたあとで、「ランキング1位のデータのみ取得」とすればよい。結果は以下のとおり。
  • rank関数を用いて(赤枠)、ランキング1位のデータのみ抽出(青枠)できた。
  • なお、この表記で「同一販売金額が複数あるとき取得できるか」を試すため、ランキング2位のデータを取得してみる。
  • 以下のとおり、ランキング2位の販売金額は10,800円で2データあるが、2つとも取得できた。

考察

  • データベーススペシャリスト資格について。今回はデータモデルと専門用語の対処法について復習した。特に専門用語はわかりやすい表現への置き換えが重要だ。また、SQLの確認ドリルを解いた。お題はデータの並び替え、指定列の取得だ。
  • 考察。私は、自分なりの価値観と目標を定め、コツコツ積み上げるのが好きだ。日々の安らぎと、身近な人とのふれあいも大切にしたい。例えるなら、どこに向かうのかわからないジェットコースターに飛び乗るのでなく、自分の足で、ゆっくり、景色を楽しみながら歩くようなものだろうか。

考察のシンプル化と英訳(練習中)

  • I walk on my own foot with a wonderful views. itself is my happiness and my life.
  • (私は素晴らしい景色を眺めながら、自分の足で歩きます。それ自体が私の幸せであり、人生です)

参考資料

  • 2022年度版 ALL IN ONE パーフェクトマスター データベーススペシャリスト/TAC
  • 集中演習 SQL入門/木田和廣/株式会社インプレス(SQL確認ドリル)

コメント

タイトルとURLをコピーしました