エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

平成29年度データベーススペシャリスト対策まとめ

データモデル

概念データモデル

ユーザの要件定義に基づいて作成。
使用するDBMSに依存しない。
E-R図が該当する。

論理データモデル

概念データモデルを使用するDBMSの種類を前提に、再整理したデータモデル。
階層・ネットワーク・関係モデルが該当。

物理データモデル

DBMS固有のデータ構造や格納する型を前提に、詳細に定義したデータモデル。
テーブル定義表、インデックスなど。

ERD(ER図)

概念データモデルを表現する図形。
エンティティを表す四角形と、関係を表す矢印・直線を使用する。

インスタンス

エンティティの内容に沿った実データのこと

主キー

インスタンスを一意に識別できる属性の組み合わせ。
ERD上では、下線を引いて主キーを示す。
主キーが複数の属性からなる場合、複合キー・連結キーということがある。
主キーには下記の制約がある。

制約名 内容
一意性制約 エンティティ内に1つ(もしくは、1くみ)しか存在しない組み合わせであること。UNIQUE制約とも言う
非NULL制約 値がNULLではないこと(そのまんまやないかい!)

リレーションシップ

エンティティ間のインスタンスの数の対応関係のこと。

  • 1:1
  • 1:多(多:1)
  • 多:多

上記表現は、カーディナリティ、デグリー、多重度という。
なるべく1:1の関係になるように心がける。
また、それを目指して複雑なテーブル設計にならないようにする。 多:多は、必ず避ける。 なぜならば、未完成の設計に該当するため。
回答する場合は、多:多の関係を書いたら、必ず減点されるので注意

外部キー

あるエンティティの属性が、他のエンティティの主キーを参照する属性のこと。
エンティティでは、破線の下線で表現する。 主キーと外部キーの関係は、ほぼ1:多の関係になる。

連関エンティティ

多:多の関係にあるエンティティ間の間に存在するエンティティのこと。
お互いの主キーの組み合わせのエンティティになる。

スーパータイプとサブタイプ

汎化

複数のエンティティに共通する属性・属性値を、1つのエンティティにまとめること。

スーパータイプ

汎化した結果の共通項目のエンティティ。
スーパータイプとサブタイプの主キーは、ほぼ一致する。

サブタイプ

汎化した結果、残った属性のエンティティ

排他的サブタイプ

スーパータイプのインスタンスができたとき、複数あるサブタイプのエンティティのうち、どれか1つだけインスタンスが生成される関係のこと。 スーパータイプに、サブタイプを区別する属性を持つことが一般的。
ほとんどのサブタイプは、排他的サブタイプに該当する。

共存的サブタイプ

スーパータイプのインスタンスができたとき、全サブタイプのインスタンスが生成される可能性がある関係のこと。
スーパータイプにサブタイプの数だけ区分を持つ必要がある。

関係データモデル

関係モデル

行・列の2次元表のデータ構造で表記。

候補キー

データを一意に特定できる極小な属性群のこと。
NULLも許容する。

主キー

候補キーの中から選ぶ。
非NULLでなければならない。

非キー属性

候補キー以外のキー

代理キー

候補キーで、主キーの以外の属性のこと。

関数従属性

ある属性が決まると、他の属性も一意に決まる性質をもつ属性のこと。
1つの関係をもつX,Y間で、Xの属性が決まるとYも決まるとき、YはXに関数従属するという。
Xは、決定項。Yは、非決定項という。
決定項と非決定項は、多:1の関係になる。

正規化

データベースから冗長性を排除すること。

正規化用語

完全関数従属性

非キー属性が、候補キーを構成する全ての属性に関数従属している。
候補キーの属性が1つのみの場合は、他の属性は全て完全関数従属している。
候補キーの属性が2つ以上の場合、全て決まると値がきまる属性を完全関数従属しているという。

部分関数従属

候補キーの属性が2つ以上の場合で、候補キーの一部が決まると、データが一意になること。

推移的従属性

ある属性が決まると非キー属性の属性がきまり、さらにその非キー属性が別の非キー属性と一意になっている関係。

非正規系

1レコード内に、項目が複数ある属性が存在する状態。

第1正規系

繰り返し項目がない状態

第2正規形

非キー属性が、完全関数従属している状態にしなければいけない。
※非キー属性が部分関数従属していないこと。
部分関数従属の属性は、別テーブルに分ける。

第3正規形

非キー属性間で、推移的従属性が存在しないこと。

第4正規形

候補キーと非キー属性に多値従属性がない関係。

多値従属性

決定稿が決まると、複数の非決定項が決まること。

各正規化の判断基準

正規化 根拠
第1正規形 属性値に繰り返しがない
第2正規形 属性に繰り返しがなく、非キーがいずれも候補キーに対して完全従属している
第3正規形 属性に繰り返しがなく、非キーがいずれも候補キーに対して完全従属しており、候補キーと非キーに推移関数従属性がない

非正規化の問題点

DB更新時に異常が発生する

更新種類 問題内容
挿入 事前登録できない。もしくは、重複登録しなければいけない。
更新 重複更新しなければいけない。
削除 最後の行を削除すると、関係が失われる

関係代数

データの関係を定義する演算式。
下記の種類がある。

  • 集合演算
    • 直積
  • 関係演算
    • 射影
    • 選択
    • 結合

SQL

DB定義・操作を実行するために使用される言語。

データ定義

  • CREATE SCHEMA
    スキーマ作成
  • CREATE TABLE
    テーブル作成
  • CREATE VIEW
    ビュー作成
  • CREATE ROLLE
    権限作成
  • ALTER
    スキーマ・テーブル・ビュー定義の変更
  • DROP
    スキーマ・テーブル・ビューの削除
  • GRANT
    アクセス権限付与
  • REVOKE
    アクセス権限削除

データ操作

  • SELECT
  • INSERT
  • UPDATE
  • DELETE

SELECT

基本文法

SELECT 属性
FROM 表明
WHERE 条件
GROUP BY グループ化項目
HAVING グループ化後の抽出条件
ORDER BY ソート条件

属性に対する操作

DISTINCT

重複した行をまとめる

集合関数

  • MAX
  • MIN
  • AVG
  • SUM
  • COUNT

演算子の優先順位

優先順位 演算子
1 *, /
2 +, -
3 =, <>, <, >, <=, >=
4 IS NULL, IS NOT, LIKE, IN, BETWEEN
5 NOT
6 AND
7 OR

()をつければ、優先されて計算される。

特殊な操作

UNION

UNION, UNION ALL で和演算ができる。
UNION ALLで重複した行をまとめられる。

INTERSECT

積演算

EXCEPT

差演算

INSERT, UPDATE, DELETE

INSERTの基本文法

INSERT INTO テーブル名 (属性)
VALUES(値)

UPDATEの基本文法

UPDATE テーブル名
SET 列名 = 値, 列名 = 値
WHERE 条件

DELETEの基本文法

DELETE FROM テーブル
WHERE 条件

DDL

CREATE TABLE

CREATE TABLE テーブル名(
    列名 データ型 列制約,
    列名 データ型 列制約
    )

外部キーの更新・削除規則

動作 概要
NO ACTION 主キー側の行を削除・更新するとき、外部キー側に同じ値があれば、主キー側の更新・削除が拒否される。
CASCADE 主キー側が更新・削除される場合、外部キー側の同一値の値が更新・削除される。
SET DEFUALT 主キー側を削除するとき、外部キー側をデフォルト値に変える。
SET NULL 主キー側を削除するとき、外部キー側をNULLに設定する。

DBMS関連

トランザクション

トランザクション処理

データベースの更新・削除・参照などの複数の処理を1つにまとめること。

ACID特性

  • Atoromicity:原子性
    処理された/されてないのどちらかになること。
  • Consistency:一貫性
    データベースの状態が一貫していること。
  • Isolation:隔離性
    トランザクションの並列処理ができること。
  • Durability:耐久性
    トランザクション終了後、その後の障害に影響されずにデータを保持できること。

隔離性を満たさない現象

ロストアップデート

更新したはずのデータが更新される前に戻ってしまい、更新内容が消失する現象。

ダーティリード

ロールバック前のデータを読み取って、誤読してしまう現象。

ノンリピータブルリード

トランザクションが2回同じデータを読み取った時、別々の値を読み込んでしまう現象。

ファントムリード

トランザクションが2回以上、同一範囲のデータを読み取った時、最初の1回目はなかったデータを2回めで読み取ってしまうこと。

隔離性水準

トランザクションが別トランザクションが受ける影響の許容度。
下記種類が存在する。

隔離性水準 ダーティリード ノンリピータブルリード ファントムリード
Read Uncommitted あり あり あり
Read Committed なし あり あり
Repeatable Read なし なし あり
Serializable なし なし なし

排他制御

楽観法

書き込み時に更新の有無をチェックする。
ロックをしない。

時刻印法

時刻印を保持し、他のトランザクションと競合して内科を判定する。
ロックしてない。

ロック法

一定の制約があるロックを掛けて、更新を行う。
ロックする範囲を、行・ページ・テーブル・データベースから選べる。

ロックには、共有ロックと専有ロックがある。

デッドロック

トランザクションが互いに共有資源をロックし、ロック解除を待って処理が進まなくなる状態

防止

決められた順序に従って更新をさせる。

検知

2相ロック

更新時にロックを掛け、ロックを開放する際は、すべてのロックを開放する。
デッドロックは防げない。

障害回復機能

ログファイル

障害回復の準備として、ログファイルを出力する。
ログファイルが消失すると、復旧ができなくなる。
※試験は、ログファイルを消失しない暗黙のルールがある。

ログファイルは、更新前後に書き込まれる。
出力されるタイミングは、以下の通り。

操作 更新前ログ更新後ログ
データ挿入 なし | あり
データ更新 あり | あり
データ削除 あり | なし

WAL

ログは、更新前後ともにデータベースの更新より先に出力される方式。
理由は、ログファイルがデータベース更新後に出力できないと、復旧できなくなる可能性があるため。
それを回避するために、最初に出力する。

ロールバック

後退復旧。
障害が発生した時点から、更新前ログを使って、指定された時点に復旧する。

ロールフォワード

前進復旧。
バックアップからコピーされたテーブルに対し、更新後ログを使って、指定された時点に復旧する。

トランザクション障害

更新前ログを使って、後退復旧。

媒体障害

バックアップ・リストア、更新後ログでロールフォワード。

システム障害

電源断、OS障害、DBMS障害などでDBMSが動作しなくなった状態。
DBMSが停止するので、ログが出力されない。

分散データベース

遠隔地にあるデータベースをネットワークを使って連携させる。

透過性

名称 説明
アクセス透過性 同一法歩でアクセス
位置透過性 物理的な配置場所を意識しなくていい
移動透過性 格納サイトが変更されても影響がない
分割透過性 1つのデータが複数サイトに分割されても意識しなくていい
重複透過性 1つのデータが複数サイトで重複格納されても意識しなくていい
規模透過性 OSやアプリの影響を受けない
並行透過性 同時並行でデータベースの操作が行える

テーブル結合法

  • セミジョイン
    結合処理はサイトごと
  • 入れ子ループ法
    データを1行づつ送信
  • マージジョイン法(ソートマージ法)
    データを全行送信

表領域

物理的な格納領域

牽引

  • ユニーク牽引
    検索キーに該当するのは1行だけ
  • 非ユニーク牽引 検索キーに該当するのは複数行
  • クラスタ牽引
    検索キー順番と、検索キーに該当する行の物理的な並び順が一致
  • クラスタ牽引
    検索キー順番と、検索キーに該当する行の物理的な並び順が一致しない

午後問の解法テク

主キー・外部キーを見つける

問題に出てくるスキーマは未完成の状態。
そのため、関係名や属性名を見ながら主キー・外部キーのあたりをつけて、問題を読み進めながら特定する。

主キーになりそうな項目は、「〜番号」「〜コード」「〜区分」「〜ID」とかが多い。
この項目名が出てきたら、要注意。 また、主キーは一番最初に列挙されることが多い。
一番左に該当する項目は、要注意して確認すること。

問題文中に、「一意な」「識別される」の文言がある場合は、主キー確定。

多重度を見極める

多重度が曖昧に表現されていることが多い。
不明な場合は、多対多、1対多を想定して考える。

スーパータイプ・サブタイプに注目しておくこと。
区分、フラグが該当する事が多い。

隔離性水準の覚え方

分離レベル ダーティリード ノンリピータブルリード ファントムリード
Read Uncommitted
Read Committed
Repeatable Read
Serializable

◯:発生する
✕:発生しない

ダノフはシリコン
ダ:ダーティリード ノ:ノンリピータブルリード フ:ファントムリード (は) シ:serializable リ:repeatable read コ:read committed ン:read uncomitted

配置順序さえ間違えなければ、これで完璧!
あとは、わかりやすい○の配置なので、覚えられるハズ。

その他参考サイト

データベース研究室 – DATABASE LABO

データベーススペシャリストドットコム

情報処理試験まとめ/データベーススペシャリスト試験の勉強法まとめ - まとめwiki - アットウィキ