出題される単語について
ビュー
- DBのスキーマ単位のもの(テーブル、ビュー、インデックス、プロシージャなど)
- 変数のようなもの
- 検索結果から、再度検索したい時などに、最初の検索結果をビューとして保存し、
そのビューに検索を再度かける(変数のようなもの)
トランザクション
ジャーナルログ
- 「ログ」がある操作や出来事が「起こったという記録」を指すのに対し、ジャーナルはある操作や処理によって「変更された内容の記録」を指すことが多い。
- ジャーナルログに実行されたSQLが保存されており、トランザクション中にエラーが起きた場合、ジャーナルログのSQLを再度投げることで、データの不整合を防ぐ
トランザクション分離レベル
分離レベル ダーティリード ファジーリード ファントムリード
READ UNCOMMITTED ○ ○ ○
READ COMMITTED × ○ ○
REPEATABLE READ × × ○
SERIALIZABLE × × ×
ダーティリード (Dirty Read)
トランザクションBでコミットされていないデータをトランザクションAで読み取ってしまう問題が起きます。
ファジーリード/ノンリピータブルリード (Fuzzy Read / Non-Repeatable Read)
トランザクションAでデータを複数回読み取っている途中で、トランザクションBでデータを更新してコミットした場合、トランザクションAで違う結果のデータを読み取ってしまう問題が起きます。(非再現リードとも呼ぶ)
ファントムリード (Phantom Read)
トランザクションAで一定の範囲のレコードに対して処理を行っている途中で、トランザクションBでデータを追加・削除してコミットした場合、トランザクションAで幻影のようにデータが反映されるため、処理の結果が変わってしまう問題が起きます。
設計について
-
ER図
- エンティティとリレーションを図にしたもの
- 多重度
- 「1」は1
- 「*」は任意の整数
- 「0…1」は範囲
- 「1..*」は1以上
-
正規化
候補キー
候補キーとはテーブル上で任意のレコードを特定するためのカラムの集合です。
つまり主キーやユニークキーのことです。
非キー属性
候補キーに含まれないもの
主キーやユニークキーに含まれないカラムのことを指します。
関数従属性
あるレコードにおいて、特定のカラムAの値が決まれば、別のカラムBも特定できるような関係のことを指します。
部分関数従属性
部分関数従属性とは、ある非キー属性が、候補キーのー部に関数従属している場合のことを指します。
店舗名 購入者名 商品 価格 購入数 新宿店 田中 うまい棒 10 2台 新宿店 田中 ノート 150 2台 池袋店 田中 加湿器 2200 2台 上記テーブルには価格カラムがありますが、これは「うまい棒はいくらか?」と聞かれれば「10円」とように、商品の価格は商品ごとに決まっています。
上記の例では価格は商品に関数従属しています。
商品はこのテーブルの候補キー{店舗名,購入者名,商品}の一部です。
つまり、価格は候補キーの一部である商品に部分関数従属しています。
推移関数従属性
これは、あるテーブルの非キー属性Aが特定の非キー属性Bに関数従属しているような場合のことを指します。
※第3正規系の手順を適用するには、対象テーブルがすでに第2正規系となっている必要があります。
X → A → B
のような関係は、Bは、Xが決まればAが決まりBが決まる、というようにBはXに対して間接的に従属していることとなります。
このような関係を推移という表現がされています。
正規化の手順
第1正規系
第1正規系の条件は、テーブルで表現できる形になっていることです。
つまり一つのカラムに1つの値のみ設定されている状態のことです。
「属性の繰り返し」がないこと
第2正規系
第2正規系の条件は、テーブルのすべての候補キーにおいて部分関数従属性が存在しないことです。
下記
店舗名 購入者名 商品 価格 購入数 新宿店 田中 うまい棒 10 3 新宿店 田中 ノート 150 2 池袋店 田中 加湿器 2200 1 は価格が商品に対して部分関数従属しているので、これを
店舗名 購入者名 商品 購入数 新宿店 田中 うまい棒 3 新宿店 田中 ノート 1 池袋店 田中 加湿器 2 商品 価格 うまい棒 10 ノート 150 加湿器 2200 の2つのテーブルに分割して、部分関数従属性を排除します。
第2正規系は要は、候補キーの一部→非キー属性の関数従属を排除します。
第3正規系
第3正規系の条件は、テーブル内の非キー属性→非キー属性の関数従属、つまり推移関数従属性が存在しないことです。
例えばクラスの担任を管理する下記テーブルにおいて
クラス 担任 経験年数 2-A 田中 3 1-C 鈴木 11 このテーブルの候補キーは{クラス}ですが、担任の業務経験年数は担任の教師が決まればわかります。
つまり非キー属性の経験年数は、非キー属性の担任に依存しています。
これを
クラス 担任 2-A 田中 1-C 鈴木 担任 経験年数 田中 3 鈴木 11 という形でテーブルを分割し、非キー属性間の関数従属(推移関数従属性)を排除します。
第3正規系は要は、非キー属性→非キー属性の関数従属を排除します。
-
DBMS(データベース管理システム)
- アプリケーションの要求に応じてデータベースを操作すること
- データ操作
- 選択=select
- 射影=select where
- 結合=join
- 挿入=insert
- 更新=update
- 削除=delete
- ビュー
- 実表から仮想的な表を生成する create view
- データを隠蔽できる
- 双方データを変更すると双方に適用
- ストアドプロシージャ
- 複数の命令を1つにまとめ、DBMSに保存したもの
- クライアントとサーバーのアクセス数を軽減できる
-
トランザクション
-
関連する処理のまとまり
-
ACID特性
-
障害回復
-
バックアップファイル
データベース全体を保存しているファイル
-
ログファイル
- トランザクションの前後を保存したファイル
- 更新前ログファイル(トランザクション前)
- 更新後ログファイル(トランザクション後)
- トランザクションの前後を保存したファイル
-
ロールバック
- トランザクション中の障害
- トランザクション中の障害時に、「更新前ログファイル」を使って、「トランザクション開始前」に戻すこと
-
ロールフォワード
- トランザクション後の障害
- トランザクション後の障害時に、「バックアップファイル」と「更新後ログファイル」を使って、「トランザクション完了後」に戻すこと
-
-
-
排他制御
- 複数の人が「同じデータ」を「更新」したときに、「データに矛盾が生じない」ようにすること
- 専有ロック
- 更新時に利用
- 「ロックをかけたトランザクション」のみが「データを読み書きできる」
- 他のトランザクション🙅
- 共通ロック
- 「ロックをかけたトランザクションと他のトランザクション」の両方が、「データの読み出しのみ」行える
- 他の共通ロックのみトランザクション👌