はじめに
こんにちは、@shoot16625 です。
秋頃、令和3年度データベーススペシャリスト試験(デスペ)を受け、無事合格することができました(^^)
本記事は、デスペに向けた勉強内容と試験当日の所感をまとめています。
筆者について
- 社会人2年目(エンジニア)
- データ分析でSQLを書くことが多いです
- 応用情報技術者あり
- 昨年の安全確保支援士は不合格😢
- デスペは今回が初めて
- 一次試験免除あり
- 業務に一番関係ある内容なので選択
です。本記事の対象とする読者も筆者と似たような方を想定しています。
試験までにやったこと
2~3ヶ月前
データベーススペシャリスト(令和2年度版)をメルカリでポチって、ざっと一周しました。
全9章+過去問となっていて、過去問以外に取り組みました。
重要な部分はPCにメモして、たまに見返して意味がわからなければ、参考書で復習していました。
(その時のメモは、本記事の一番下に記載しています。)
1~2ヶ月前
データベーススペシャリスト過去問道場 で、午前Ⅱの対策を行いました。
過去5年分くらいやったと思います。
同じ問題が何度も出現するので、問題と答え丸ごと覚えてました。
1ヶ月前の時点で午前Ⅱを通過するレベルになっておくと、午後の対策にもなりますし、残りの時間を午後対策に使えるので、良かったかなと思います。
最終的に試験当日までで、下の画像くらい網羅しました。
並行して、参考書の過去問を1年分軽い気持ちで解いてみました。
が、午後問題に打ちのめされた苦い記憶があります...
E-R図ってパズルくらいの感覚をもっていたのですが、文章で書かれている関係を正しく読み取るのが苦痛でした。コクゴキライ。
解説を読んでもよく分からないレベルだったので、参考書内にある午後問題の解き方を紙に書いて、2周くらい学びなおしました。
↑午後Ⅰの解答例
1日~1ヶ月前
午後問題6年分解きました。(シルバーウィークがあってよかった)
参考書に過去問題の解説データが付いているので、助かります。
午後Ⅱの問題はかなり難しいので、ある程度午後Ⅰの問題が解けるようになってから、試すと良いでしょう。
私は、新しい問題にどんどん手を出すよりは、同じ問題を繰り返し解いて理解を深めるようにしました。
また、問題を解く際はきちんと時間を計って正しい姿勢で試験のように行うことをおすすめします。決して私のようにソファに寝そべりながらやってはいけません。自分で読めない字を書いてはいけません。実際に試験を受けて感じました。詳細は後述。
また、youtubeにアップされている問題の解き方・メモのとり方の動画は参考になりました。(試験当日にぶっつけで使ってみて失敗しましたが)
並行して過去問道場で午前Ⅱの振り返りを行い、間違えた問題を重点的に復習しました。
試験当日
私は午前Ⅰ試験免除となっていたので、午前Ⅱからスタートです。
午前Ⅰは問題範囲が別物なので、あるとかなり厄介です。
午前Ⅱ
過去問をしっかりやっておけば、50点は固いです。
残りの問題は、選択肢を1/2に絞れたとして、ランダムに選んでも25点くらいとれるでしょう。
満点をとるには参考書を隅々まで暗記しても足りないので、それは捨てます。
午後Ⅰ
問1,3を選んで、問1から解き始めました。
- 問1. ポイントシステム
- 4Pも問題文あるやん...
- ここで、一段落できそうだなって区切りがなくてかなり辛かった
- 正規化の問題数年ぶりに復活してる!(勉強しといてよかったー)
- 4Pも問題文あるやん...
- 問3. 不動産システム移行
- SQLは得意なので、落ち着いて解けた
ぶっちゃけ、問1はかなり焦りました。
記述する文字数も多くて、どんどん時間がなくなってきます。
半分くらい空欄がある状態で、一旦問3へ。
その後戻ってきて、最後の方は適当に埋めました。
空欄はもったいないので、何かしらで埋めましょう。
twitterでも午後Ⅰがやばいというツイートが多かったですね。
データベーススペシャリスト、午後Iで時間全然足りなかった
— pftaru (@pftaru) October 10, 2021
また、試験形式が久しぶりすぎて、集中力が続かなくなっていました。
周りの人のペンを進める音がこわいこわいw
思えば、社会人になる前は試験自体もたくさんありましたし、模擬試験などもあるので、ちゃんと本番慣れしていたんだな、と思います。
ですので、過去問題を解く際は、本番のように行うことをおすすめします。
特に、初見の過去問には真摯に向き合いましょう。
同じ問題を繰り返し解き、正解して自信をつけるのも大事ですが、それは予め問題の概要を把握しているという点がかなり有利に働いています。
なので、本番で問題を見た際に内容が頭にすっと入ってこないと余計にテンパります。はい。
午後Ⅱ
問2を選びました。
- 問2. 製品運用業務
- 記述量多いなぁ
- やるしかない
こちらも時間ギリギリでした。5分前くらいに終わったかな。
午後Ⅱは2時間あるので、そこまで苦しむ想定はしていなかったのですが、、、
関係スキーマの属性名の書き方は毎回悩みますね。
拠点コード ? 物流拠点コード ? たしか、私は後者で解答しました。模範解答は前者でした。
たぶん、どちらでも大丈夫です。迷ったら詳細な書き方をするようにしていました。
試験結果の予想
午前Ⅱ:○
午後Ⅰ:△
午後Ⅱ:△
50:50くらいの自信でした。
午後問題は、記述なのでどう採点されるかわからないし、何か一つ読み違えていると、連鎖的にミスに繋がるので、怖いですね。
問題文を読み解く力と数学的な力が試されてますね。
読解力伸ばすために、普段から本を読むようにしようかな、と思って、道尾秀介の向日葵の咲かない夏 読みました。激おこ
試験結果
午後問題がここまで取れているとは思っていませんでした。
いい方に転んだかなと思います!!
おわりに
デスペは20代のうちに取れればいいかなーくらいの感じだったので、合格できてほんとラッキーでした。
来年は何を受けようかな。
勉強メモ
参考書
データベースとは
-
データベースの起源
- 元はアメリカの軍事情報を集めた場所
Data Base
- 元はアメリカの軍事情報を集めた場所
-
データモデル
- 概念データモデル
- どのようなデータを格納するか
- 論理データモデル
- どのように実装するか
- 物理データモデル
- データの配置・性能を考える
- 概念データモデル
-
論理データモデル
- 階層型
- ネットワーク
- リレーショナル
- オブジェクト指向
- クラスとインスタンス(オブジェクトの実体)
-
リレーショナルモデル
- リレーションとタプル(行、組)
-
システム開発とデータベース
- プロセス中心アプローチ
- DFD(データフロー)
- 状態遷移図
- データ中心アプローチ
- E-R図
- オブジェクト指向アプローチ
- UML(シーケンス図)
- プロセス中心アプローチ
-
データ中心アプローチ
- 概念設計 -> 概念データモデル
-
3層スキーマアーキテクチャ
- ANSIで標準化されたデータベースを分ける方式
- 外部スキーマ(ビュー)
- 概念スキーマ
- 内部スキーマ(インデックス)
- ANSIで標準化されたデータベースを分ける方式
-
データウェアハウス
- BI
- OLTP
- OLAP(データウェアハウス)
-
ビッグデータ
- 3V
- データの量
- データの種類
- 処理頻度
- 3V
データベース基礎理論
-
正規化
- 目的
- 更新時異状を排除するため
- タプル挿入時異状
- 更新時異状
- 削除時異状
- 更新時異状を排除するため
- 1箇所1事実
- 目的
-
正規化をあえて行わない場合
- 更新しないもの(データウェアハウス)
- データの履歴を残すもの
- 高速化が特別に必要なもの
-
正規形の種類
- 第一
- 第二
- 第三
- ボイスコッド正規形・第四・第五
-
関数従属性
- Xが決まればYも決まる
-
導出属性
- 他の属性から演算できる属性
-
情報無損失分解
-
第一正規化
- シンプルなドメイン上で定義された関係
- 直積・ベキ集合をなくす
-
候補キー
- タプル(行)を一意に識別できる属性の組
- ひとつとは限らない
-
主キー
- 候補キーの中から選ぶ
- Null含まない
- 選ばれなかった候補キーのことを代理キーと呼ぶ
-
関係スキーマ
- 下線、波線
-
第二正規化
- 全ての非キー属性が候補キーに完全関数従属している
- 部分従属性を排除する
-
第三正規化
- 全ての非キー属性が候補キーに推移的に関数従属しない
- 外部キーとして残す
- 他の関係の主キー
- 参照制約
- 簡単に消せない
- カスケード
-
ボイスコッド正規形
- X->Yが自明な関数従属性である
- スーパキーである
- idみたいなやつ
- おかしくなる場合もある
- 関数従属性損失
- 情報無損失分解・関数従属性保存ができるのは第三まで
-
第4正規形
- 多値従属性
-
第5正規形
- 結合従属性
-
関係演算
- 和
Union
- 差
Except
- 積
Intersect
- 直積
Cross Join
From a, b
- 射影
Select
- 選択
Where
- 結合
Join
- 商
- R / S = Sの関係を全て含むRの列を取り出す
- θ結合
- 比較演算子を使うjoin
- 等結合
- 等号を使うjoin
- 自然結合
- 等結合から共通属性(列)をまとめたもの
- 左外部結合
left join
- 右外部結合
right join
- 完全外部結合
outer join
- 和
データベース設計
-
トップダウンアプローチ
- E-R図の作成 -> 属性の洗い出し -> 正規化
-
ボトムアップアプローチ
- 属性の洗い出し -> 正規化 -> E-R図の作成
-
正規化による不都合
- 履歴を残したい場合
- 連番
- 高速化したい場合
- 導出属性を持たせる
- 属性を重複して持たせる
- 履歴を残したい場合
-
データベースの制約
- CHECK制約
- NOT NULL制約
- UNIQUE制約
- PRIMARY KEY制約
- 外部キー制約
-
データベースシステム設計
- CRUD分析
- 決定表
-
E-R図
- エンティティタイプ
- リレーションシップ
- 線
- カーディナリティ
- 数の関係
- スーパータイプとサブタイプ
- 汎化と特化
- 連関エンティティ
- 多対多
- UML表記
- クラス図
- 多重度
- スーパータイプとサブタイプ
- 排他的/共存的サブタイプ
SQL
-
標準SQL
- SQL:2008
-
種類
- SQL-DDL
- データ宣言言語(テーブル、ビュー、インデックス)
-
create table
- データ型、制約
-
create view
- 仮想的なテーブル
create index
-
declare cursor for select
- 一時的なテーブル
create role
- SQL-DCL
- データ制御言語(トランザクション)
-
grant all privileges on 商品 to マリオ
- すべての権限をマリオに与える
- `start transaction
read uncommitted
read committed
repeatable read
serialize
-
commit:終了確定
roleback:取り消し
- SQL-DML
- データ操作言語
select
- 集約関数
-
join
using
-
where
- exists
current_date
current_time
coalesce
union
intersect
except
- window関数
lag
get_lapse
recursive
- 副問い合わせ
- 相関副問い合わせ
insert
update
delete
- SQL-DDL
-
ビュー
- 固定のSQL
- 更新可能なビューは限られている
- 体現ビュー(記憶)
-
カーソル
- 1行ずつ
- ストアドプロシージャなどから実行される
- 処理の高速化
- 通信量削減
create procedure
- トリガ
DBMSとは
-
DBMSの三大機能
- メターデータ管理
- 質問処理
- クエリオプティマイザ
- トランザクション処理
-
インデックス
- 高速化
- 列の値とポインタ
- データの更新時にはインデックスの再構築が必要
-
データ構造
- B木
- バランス木
- B+木では葉を連結する
- B*木では効率化
- 主キーによく使われる
- 複数のインデックスを同時に使えない
- ビットマップ
- 取りうる値の数が少ない場合
- ハッシュ
- データの格納位置をハッシュで管理
- B木
-
ユニークインデックス
- 主キー
-
非ユニークインデックス
- 外部キー
-
クラスタ化インデックス
- データの格納箇所をまとめる
-
性能設計
- インデックス設計ポイント
- 一つのテーブルにインデックスを設定しすぎない
- データ量が少ないときは設定しないほうがよい
- クラスタ化インデックスはやるなら主キー
- ディスク容量の計算
- パーティション
- パーティションキー
- インデックス設計ポイント
-
テーブルの結合
- 入れ子ループ法
- 直積
- マージジョイン法
- あらかじめソートしておいてから結合
- 比較処理高速化
- セミジョイン法
- データ転送
- ハッシュジョイン法
- 入れ子ループ法
-
トランザクション
- ACID特性
- 原子性
- COMMIT or ROLEBACK
- 一貫性
- 処理が重なっても、独立時と同じ状態
- 直列可能性
- 独立性
- 独立して実行できなければならない
- 耐久性
- 障害が起こっても回復
- 原子性
- 排他制御
- ロック
- ACID特性
-
ロック
- 共有ロック
- 専有ロック
- ロックの粒度
- 2相ロック方式
- なるべくロックを外さない
- デッドロック
-
トランザクション分離レベル
- Read Uncommited
- ダーティリード
- Read Commited
- アンリピータブルリード
- 同じデータが異なってしまう
- アンリピータブルリード
- Repeatable Read
- ファントムリード
- データが変わってしまう
- ファントムリード
- Serializable
- Read Uncommited
-
ログ
- 種類
- 更新前ログ
- 更新後ログ
- チェックポイント
- ログバッファ
- ログファイル
- ロールバック
- ロールフォワード
- 更新後ログを使うことで、commit後の状態に進める
- WAL
- 障害回復
- 更新ログレコードの書き出しを先にやる
- 種類
-
障害回復処理
- 種類
- トランザクション障害
- SQLでロールバック
- ソフトウェア障害
- 更新ログを使って、ロールバック、ロールフォワード
- ハードウェア障害
- バックアップ
- トランザクション障害
- バックアップ
- フル
- 増分
- 差分
- 種類
-
分散データベース
- 分断耐性
- 通信障害が起こっても処理を継続できるように
- CAP定理
- 一貫性、可用性、分断耐性のうち、同時に2つしか満たすことができない
- 透過性
- 位置
- 分割
- 複製
- 2相コミット
- 第1相
- 全DBMSにコミット要求
- 第2相
- コミットの決定
- 第1相
- 分断耐性
概念設計
- 概念データモデルの作成
- データ中心アプローチ
- トップダウン・アプローチ
- 主にスーパタイプ/サブタイプの切り分けや新しいデータの追加が行われる場合
- ボトムアップ・アプローチ
- 項目があらかじめ定められている場合
- E-R図
- トップダウン・アプローチ
- 具体例
- データ中心アプローチ
論理設計・物理設計
-
論理設計を行う理由
- システムとデータベースを独立させる
-
概念データモデルと論理データモデル
-
インスタンス(データ)の設定
- テーブルに実際に入る値:インスタンス
- 注意点
- 値の取得元
- 値が設定、更新されるタイミング
- 連動して更新される列や表
- 制約条件
-
ソフトウェア品質
-
JIS X 25010
- 機能適合性
- 性能効率性
- 互換性
- 使用性
- 信頼性
- セキュリティ
- 保守性
- 移植性
- 副特性
- 有効性
- 効率性
- 満足性
- リスク回避性
- 利用状況網羅性
-
-
XP
- エクストリームプログラミング
- 事前計画よりも柔軟性
- 種類
- ペアプログラミング
- テスト駆動開発
- リファクタリング
- 継続的インテグレーション
- バーンダウンチャート
- レトロスペクティブ
-
データベース移行設計
- パイロット移行方式
- 特定の一部だけを先行して移行
- 並行運用移行
- 新旧環境で並行運用
- パイロット移行方式
-
RDBMS
- データページ
- ページサイズ
- テーブル
- 索引
- DBの相互接続機能
- データページ
-
信頼性設計
- フォールトトレランス
- 一部でエラーが起きても、全体でカバー
- フォールトアボイダンス
- 障害が起きる確率を下げる
- フェールセーフ
- 安全に
- フェールソフト
- 最低限稼働
- フォールトマスキング
- 装置の故障があったときに、他でカバー
- フールプルーフ
- 優しい操作画面
- フォールトトレランス
-
システムの冗長化
- デュアルシステム
- デュプレックスシステム
- ホットスタンバイ
- ウォームスタンバイ
- コールドスタンバイ
-
RAID
- 0
- 複数台のハードディスクにデータを分散
- ストライピング
- 1
- 同時に書き込む
- ミラーリング
- 3, 4
- 複数台の内ひとつを誤り訂正用のパリティディスクにする
- 3: ビットごと
- 4: ブロックごと
- 5
- パリティもディスク分散させる
- 6
- 2台同時に故障しても復元できる
- 0
-
パフォーマンス・チューニング
- 非正規化
- インデックス
- SQLパフォーマンス・チューニング
-
in
よりexists
-
- パーティション
-
保守
- BCP
- BCMのひとつ
- RTO:目標復旧時間
- RPO:目標復旧時点
- ディザスタリカバリ
- ミッションクリティカルシステム
- BCP
セキュリティ
-
JIS Q 27000
- 機密性
- 完全性
- 可用性
- 真正性
- 責任追跡性
- 否認防止
- 信頼性
-
不正のトライアングル
- 機会
- 動機
- 正当化
-
攻撃
- 種類
- スクリプトキディ
- クラッキングツールを利用
- ボットハーダー
- ボット攻撃
- 内部関係者
- スクリプトキディ
- 目的
- 金銭奪取
- ハクティビズム
- 政治、思想への献金
- サイバーテロリズム
- 種類
-
暗号化技術
- 共通鍵暗号方式
- DES
- ブロックごとに暗号化
- AES
- 鍵長が128ビットに
- RC4
- ビット単位で暗号化
- ストリーム暗号の一種
- 無線LANのWEPに使われている
- DES
- 公開鍵暗号方式
- 送信者は受信者の公開鍵で暗号化
- RSA
- 素因数分解の難解さ
- 楕円曲線暗号
- 楕円曲線上での離散対数問題
- 共通鍵暗号方式
-
ハッシュ
- MD5
- 入力に対して128ビットのハッシュを出力
- SHA-1
- 160ビット
- SHA-2
- SHA-224, 256, 384, 512の総称
- 256以上が安全
- MD5
-
ディジタル署名
- 本人の秘密鍵を本人が持っている証明
-
PKI
- 公開鍵基盤
- CA
- ディジタル証明書の発行
-
CRL
- 失効した証明書のシリアルのリスト
-
OCSP
- CRLの代替
- 失効情報問い合せ
-
暗号化技術の応用
- SSL3.0 -> TLS1.0
- 認証、暗号化、改ざん検出
- IPsec
- IPパケット単位で検出
- AH
- ESP
- S/MIME
- 電子メール
- PGP
- 電子メール(小規模コミュニティ向け)
- SSH
- SSL3.0 -> TLS1.0
-
情報セキュリティマネジメントシステム
- ISMS
- リスク対応
- リスク最適化
- リスク回避
- リスク移転
- リスク保有
-
認証の3要素
- 記憶
- 所持
- 生体
-
セキュリティ機関
- 情報セキュリティ委員会
- SOC
- 監視
- CSIRT
- 監視、解析
- JPCERT/CC
- サイバーレスキュー隊 J-CRAT
- JVN
- 脆弱性情報
- 内閣サイバーセキュリティセンター
- ホワイトハッカー
-
セキュリティ技術評価
- ISO/IEC
- 評価規格
- ST
- セキュリティターゲット
- EAL
- 評価保証レベル
- JISEC
- 認証制度
- JCMVP
- Cryptographic Module
- 暗号モジュール認証制度
- PCI DSS
- Payment Card
- クレジットカード
- SCAP
- セキュリティ設定共通化手順
- 6つの標準仕様
- CVE
- 共通脆弱性識別子
- CCE
- 共通セキュリティ設定一覧
- CPE
- 共通プラットフォーム一覧
- CVSS
- 共通脆弱性評価システム
- 基本評価基準
- 現状評価基準
- 環境評価基準
- XCCDF
- OCAL
- CVE
- CWE
- 共通脆弱性タイプ一覧
- ペネトレーションテスト
- ISO/IEC
-
セキュリティ対策
- 技術的
- 入り口対策
- 出口対策
- 人的
- 物理的
- クリアスクリーン
- クリアデスク
- 技術的
-
サイバー攻撃
- バッファオーバーフロー
- SQLインジェクション
- クロスサイトスクリプティング
- クライアント向け
- クロスサイトリクエストフォージェリ
- サーバ向け
- セッションハイジャック
- DNSキャッシュポイズニング
- Dos攻撃
- パスワードクラック
- マルウェア
- 標的型攻撃
- フィッシング
- DNS水攻め攻撃
-
対策
- アカウント管理
- ログ管理
- デジタル・フォレンジック
- 入退室管理
- アクセス制御
- マルウェア対策
- 不正アクセス対策
- 情報漏えい対策
- 無線LAN
- 携帯端末
- ペネトレーションテスト
-
セキュアOS
- 普通のOS
- DAC
- 自分で設定
- DAC
- セキュアOS
- MAC
- 普通のOS
-
ネットワークセキュリティ
- ファイアウォール
- IDS/IPS
- 侵入検知
- NAT/NAPT
- プライベートIP
- VPN
-
アプリケーション
- セキュアプログラミング
- 脆弱性低減技術
- Same origin Policy
- パスワードクラック対策
- WAF
-
その他
- スパム対策
- テンペスト攻撃
- 電磁波
- ステガノグラフィ
- 秘密メッセージを埋め込む
- タイムスタンプ
- ソーシャルエンジニアリング
- CAPTCHA
-
認証プロトコル
- SPF
- Send Policy Framework
- 電子メール
- DKIM
- Domain Keys Identified Mail
- 電子メールの署名
- SMTP-AUTH
- パスワード認証
- OAUTH
- DNSSEC
- Diameter
- RADIUSの後継
- 認証・認可・課金プロトコル
- SPF
-
データベースセキュリティ
- 利用者認証
- ロール
- 暗号化
様々なデータベース
-
NoSQL
- RDBMS以外のデータベース
- 役割
- RDBMSのキャッシュに利用
- セッションデータの管理
- 分散データベース
- 種類
- KVS型(key-value)
- ドキュメント型
- JSONで格納
- カラムファミリー型
- グラフ型
- デメリット
- トランザクション機能なし
- スキーマがないので、データの性質をつかみにくい
- 主キー以外の検索に向かない
- 結果結合性
- 「時間が経てば必ずストレージに最新情報が反映される」
-
データウェアハウス
- ファクトテーブル
- ディメンションテーブル
- スタースキーマ
- スライシング
- ダイシング
- データ分析の視点を変える
- ドリリング
- ドリルアップ
- ドリルダウン
-
オブジェクト指向データベース
- O-Rマッピング
-
XMLDB
-
仮想化
- SaaS
- PaaS
- IaaS
-
ストレージ
- DAS
- ダイレクト
- SAN
- 専用ネットワーク
- NAS
- ネットワーク
- DAS
-
シェアードナッシング
-
シェアードエブリシング
- 同じデータベース