データベーススペシャリスト試験 のナレッジマップ
データベーススペシャリスト試験 の主要概念 40 件と、そのつながり。上のマップでノードをクリックすると関連用語や前提をたどれます。下は全概念の索引で、定義と「前提・関連する概念」への内部リンクを掲載しています。
概念一覧(40)
ボイスコッド正規形(BCNF)
第3正規形をさらに厳格化した正規形。「全ての自明でない関数従属の決定子が候補キーである」ことを要件とし、第3正規形では残ってしまう一部の更新時異常(候補キーが複数ある場合の異常)まで除去する。
候補キーとスーパーキー
スーパーキーはタプルを一意に識別できる属性集合全般。候補キーはその中で、これ以上属性を削ると一意性を失う最小のスーパーキー。主キーは候補キーの中から選ばれた代表であり、選ばれなかった候補キーは代替キー(alternate key)と呼ぶ(人工的に付与する代理キー(surrogate key)とは別概念)。
前提: タプルと属性
直列化可能性
複数のトランザクションを並行実行した結果が、それらを何らかの順序で1つずつ直列実行した結果と一致するという性質。隔離性水準 SERIALIZABLE はこの性質を保証し、あらゆる読取り異常(ダーティリード・反復不能読取り・ファントムリード)を防ぐ最も厳格な水準。
タプルと属性
関係モデルで、タプルは表の1行(1件のレコード)、属性は表の1列(1つの項目)を指す用語。関係代数や正規化理論の議論はこのタプル・属性の単位で行う。
前提: 関係代数
関連: 関係モデル
関数従属
属性Aの値が決まれば属性Bの値が一意に決まる関係(A→B)。正規化の理論的基礎で、主キーの一部にのみ従属する部分関数従属を解消すると第2正規形、主キー以外の非キー属性を介して間接的に従属する推移的関数従属を解消すると第3正規形が得られる。
トランザクション隔離性水準
同時実行される複数トランザクション間で、互いの未確定な変更をどこまで見せるかを定める設定。低い順にREAD UNCOMMITTED(ダーティリードを許容)、READ COMMITTED、REPEATABLE READ、SERIALIZABLE(直列実行と等価な最も厳格な水準)の4段階があり、水準を上げるほど整合性は高まるが並行性(スループット)は低下するトレードオフがある。
関連: ダーティリード
次数と濃度
関係モデルにおいて、次数は表の属性(列)の数、濃度はタプル(行)の数を指す。次数はスキーマ設計時に決まり運用中は原則不変だが、濃度はデータの増減とともに変化する。
ダーティリード
他のトランザクションがまだコミットしていない(ロールバックされるかもしれない)変更を読んでしまう読取り異常。隔離性水準 READ UNCOMMITTED でのみ発生しうり、READ COMMITTED 以上では防止される。
関連: トランザクション隔離性水準
実行計画
オプティマイザが1つのSQL文をどの順序・どのアルゴリズム(結合方式・インデックス利用の有無など)で実行するかを決めた手順。DBMS が提供する解析コマンドで可視化でき、遅いクエリの原因(全表走査など)を診断する出発点になる。
第4正規形
BCNF を満たした上で、自明でない多値従属を持たないことを要件とする正規形。互いに独立した1対多の関係が1つの表に同居していると生じる、無関係な組合せの重複挿入を排除する。
前提: ボイスコッド正規形(BCNF)
関連: 多値従属
関係代数
関係(表)を対象に、選択・射影・結合・和・差・直積・商などの演算を定義した数学的な問合せ言語。SQL の問合せは内部的にこの関係代数の演算に変換され、オプティマイザが等価な演算列に書き換えて実行計画を作る。
前提: 実行計画
関係モデル
データを行(タプル)と列(属性)からなる表(関係)の集合として表現するデータモデル。E.F. コッドが提唱し、関係代数・関係論理という数学的基盤に基づいて問合せの意味を厳密に定義できる。
前提: 関係代数
関連: タプルと属性
正規化の段階(第1正規形〜第3正規形)
リレーショナルデータベースの設計でデータの冗長性・更新異常を減らす段階的な手法。第1正規形は繰り返し項目を排除、第2正規形は主キーの一部にのみ従属する項目を分離、第3正規形は主キー以外の項目に従属する項目(推移的関数従属)を分離する。
関連: 関数従属
2相ロック
分散/並行トランザクションの直列化可能性を保証するロック方式。トランザクションはロックを獲得するだけの成長相(growing phase)と、獲得済みロックを解放するだけの縮退相(shrinking phase)の2段階から成り、一度でもロックを解放したら新たなロックは獲得できない。この規律により、スケジュールが直列実行と等価であることが保証される。
前提: 直列化可能性
オプティマイザ(コストベース最適化)
統計情報(行数・値の分布など)をもとに、同じ結果を返す複数の実行計画の候補それぞれのコスト(I/O・CPU 見積り)を算出し、最小コストの計画を選ぶ仕組み。統計情報が古い・欠落していると誤った計画を選び性能劣化を招く。
前提: 実行計画
第5正規形
すべての結合従属性が候補キーによって含意される状態まで、それ以外の結合従属性を無損失分解で除去した正規形。実務上の正規化の到達点とされるが、理論上はさらに6NF等が存在する。結合従属性とは、表を複数に分割して再結合しても元の内容に一致する性質。
前提: 候補キーとスーパーキー
ハッシュ結合
小さい方のテーブルの結合列からハッシュ表をメモリ上に作り、大きい方のテーブルを走査しながらハッシュ表と照合していく結合アルゴリズム。等値結合に限られるが、ソート済みでない大規模データ同士の結合で高速。
多値従属
1つの属性(または属性集合)の値が決まると、他の属性の値の集合が(別の属性とは独立に)一意に定まるという関係。1つの表に複数の独立した多値従属が同居すると冗長な組合せが生じ、第4正規形への分解で解消する。
関連: 第4正規形
MVCC(多版同時実行制御)
更新のたびに行の複数バージョンを保持し、各トランザクションが開始時点のスナップショットを読むことで、読み取りが書き込みをブロックしない(また逆も)並行制御方式。ロックベースの方式より高い並行性を実現し、多くの現代的な DBMS の既定の隔離実装に使われる。
外部結合
結合条件に一致しない側の行も、対応する列を NULL として結果に含める結合。左外部結合・右外部結合・完全外部結合があり、「注文のない顧客も含めて一覧化する」といった要件で使う。
ファントムリード
同一トランザクション内で同じ条件の範囲検索を2度行った際、間に別のトランザクションが行を挿入・削除したために結果件数が変わってしまう読取り異常。SQL標準では REPEATABLE READ までは発生しうるとされ、SERIALIZABLE で防止される(ただしPostgreSQLのMVCCやMySQL InnoDBのギャップロックなど、実装によってはREPEATABLE READでも防止される)。
前提: MVCC(多版同時実行制御)
参照制約(参照整合性)
外部キーの値が、参照先テーブルの主キー(または候補キー)に実在する値でなければならないという制約。孤立した参照(親レコードのない子レコード)の発生を防ぎ、テーブル間の整合性を保証する。
前提: 候補キーとスーパーキー
E-R図(実体関連図)
データベース設計において、実体(エンティティ)とその間の関連(リレーションシップ)を図で表現する概念モデリング手法。実体間の多重度(1対1・1対多・多対多)を明示し、論理データベース設計や正規化の前段階として用いられる。
稼働率
システムが正常に稼働している時間の割合。稼働率=MTBF÷(MTBF+MTTR) で求められ、故障間隔が長く修復時間が短いほど高くなる。可用性の代表指標で、SLA の合意値(例 99.9%)としても用いる。
前提: 平均故障間隔(MTBF)
B木インデックス
平衡木構造でキー値を整列して保持する、最も一般的なインデックス方式。範囲検索・等値検索・ソートいずれにも強く、多くの DBMS の既定のインデックス種別になっている。更新のたびに木の再平衡コストがかかる。
反復不能読取り
同一トランザクション内で同じ行を2度読んだ際、間に別のトランザクションが更新・コミットしたために値が変わってしまう読取り異常。READ COMMITTED までは発生しうり、REPEATABLE READ 以上で防止される。
ソートマージ結合
両テーブルを結合列であらかじめソートしてから、両者を同時に走査してマッチする行をマージしていく結合アルゴリズム。ソート済み(インデックス済み)データに強く、主に等値結合に用いられる。大量データでもソート済みなら安定した性能を出せ、ハッシュ結合と使い分ける。
前提: ハッシュ結合
平均故障間隔(MTBF)
修理して使い続けるシステムで、ある故障から次の故障までの平均稼働時間。値が大きいほど故障しにくく信頼性が高い。総稼働時間÷故障回数で算出する。
平均修復時間(MTTR)
故障が発生してから復旧するまでの平均時間。値が小さいほど早く復旧でき、保守性(メンテナンス性)が高い。総修復時間÷故障回数で算出する。稼働率=MTBF÷(MTBF+MTTR) の分母に含まれ、MTBF(平均故障間隔)と対にして信頼性・保守性を評価する。
前提: 稼働率、平均故障間隔(MTBF)
連関エンティティ
E-R図で多対多の関連を解消するために導入する、両エンティティの主キーを外部キーとして持つ中間実体。関連自体が持つ属性(例:受注日)も持てるようにし、関係データベースの表として実装しやすくする。
前提: E-R図(実体関連図)
カーソル(SQL)
ストアドプロシージャや埋め込みSQLの中で、問合せ結果を1行ずつ順に取り出して処理するための仕組み。集合演算が苦手な行単位の手続き的処理(1行ごとに条件分岐して更新するなど)に使う。
前提: 埋め込みSQL
埋め込みSQL
C言語やCOBOLなどのホスト言語のソースコード中に直接 SQL 文を記述する方式。コンパイル時にSQL文が確定する静的SQLと、実行時に文字列として組み立てる動的SQLの双方を含みうる。対比されるのは、ライブラリ経由でSQLを渡すコールレベルインタフェース(CLI/ODBC)方式である。
ハッシュインデックス
キー値をハッシュ関数で変換した値をもとに格納位置を決めるインデックス方式。等値検索(=)は非常に高速だが、範囲検索やソートには利用できない点が B木インデックスとの主な違い。
前提: B木インデックス
論理データ独立性
概念スキーマ(テーブル構造など)を変更しても、外部スキーマ(アプリケーションが見る形)に影響を与えずに済む性質。3層スキーマの狙いの一つで、テーブル追加やカラム再編がアプリ改修を伴わずに行える。
ロールフォワード
障害発生前のバックアップに、その後のログ(REDOログ)を順に適用して障害直前の状態まで復元する回復方式。バックアップ以降のコミット済み更新を失わずに復旧できる。
前提: UNDO/REDOログによる回復
3層スキーマ(ANSI/SPARC)
データベースを外部スキーマ(利用者ごとの見え方)・概念スキーマ(全体の論理構造)・内部スキーマ(物理的な格納方法)の3層に分けるアーキテクチャ。層を独立させることで、片方を変更してももう一方への影響を抑えられる。
UNDO/REDOログによる回復
障害回復でログを使い分ける2つの操作。UNDO はコミットされていないトランザクションの変更を取り消し、REDO はコミット済みだがディスクへ未反映の変更を再適用する。チェックポイント以降のログを両方の観点で走査し整合状態に戻す。
SQLの結合(JOIN)
複数のテーブルを共通の列の値で結び付けて1つの結果として取得するSQL操作。両方に一致する行だけを返す内部結合(INNER JOIN)と、一方の全行を残す外部結合(OUTER JOIN)が代表的。
前提: 外部結合
排他制御
複数の利用者・処理が同じデータへ同時に更新をかけることで生じる矛盾を防ぐため、データにロックをかけて他の処理からの同時アクセスを制限する仕組み。

