データベース理論のメモ

####はじめに
データベース理論の備忘録、メモです。

---
##データベース
###■データモデル
　以下の３種類に分けられる
　1.概念データモデル
　　ER図
　2.論理データモデル
　　・階層型
　　　会社の組織図みたいなもの。データが重複する
　　・ネットワーク型
　　・関係型（リレーション）
　　　いわゆるRDB
　3.オブジェクト指向

####データースの３値理論　　　　　　　　　　　　　　　　　　　　　　　　　　　
True,False,NULL
通常の数学理論では真、偽の２つだが、SQLではNULL(存在しない)が加わる

###3層スキーマアーキテクチャ　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　

|名称|DBの例|
|:--|:--|
|外部スキーマ|VIEW|
|概念スキーマ|TABLE|
|内部スキーマ|ファイル|

　・概念スキーマ
　　データベース化対象の業務とデータの内容を論理的なデータモデルとして表現したもの。
　　概念スキーマを記述するために記号系にはリレーショナルデータモデルの他にも、
　　ネットワークデータモデル、階層型データモデルなどがある。
　　リレーショナルデータモデルでは表の正規化やCREATE TABLEによる表定義が
　　概念スキーマに相当する。
　・外部スキーマ
　　概念スキーマで定義されたデータモデル上に利用者ごとの目的に応じた見方を
　　表現したもの。リレーショナルデータモデルのビューやネットワークデータモデルの
　　サブスキーマが外部スキーマに相当する。
　・内部スキーマ
　　概念スキーマで定義されたデータモデルを記憶装置上にどのような形式で格納するか
　　表現したもの。ファイル編成やインデックスの設定などが内部スキーマに相当する。

---
###■正規化理論

|正規化|繰り返し|部分関数従属|推移的関数従属|
|:--|:--|:--|:--|
|非正規形|有り|有り|有り|
|第1正規形|無し|有り|有り|
|第2正規形|無し|無し|有り|
|第3正規形|無し|無し|無し|

・第１正規化
　繰り返し項目をなくす。
・第２正規化
　主キーの一部によって一意に決まる項目を別表に移す。
・第３正規化
主キー以外の項目(非キー属性)によって一意に決まる項目を別表に移す。

↓その他の正規化
以下は実務で利用することがほぼ無い。
・ボイスコッド正規化
　非キー属性からキー属性の一部への関係従属性を別表に移す。ボイスコッド正規形では第3正規形までの関数従属性が保たれない。

・第４正規化
3つ以上の属性を組み合わせた複合主キーのみから成る表で2つ以上の多値従属性がある場合、これを別表に移す。

・第５正規化
n個(n≧3)の属性を組み合わせた複合主キー属性のみから成る表で、情報無損失のままn個の表に分解する。第5正規形では第4正規形までの結合従属性が保たれない

#####正規化の用語
・繰り返し項目
　同じレコードで同一項目が繰り返される
　同一カラムに、同一データが複数ある
・主キー
　レコードを特定できるカラム、あるいはカラムの組み合わせ
・非キー属性
　主キー以外のカラム
・関数従属
　主キーから特定されるカラム
・部分関数従属
　候補キーの一部に関数従属している
・推移的関数従属
　関数従属性が推移的に行われている。
　即ち（1）X→Y、（2）Y→Z、（かつX→Zでは無い）を全て満たす性質
　例：社員テーブルを例とすると社員番号→住所。住所から郵便番号。
・多値従属性
　一つの値から複数の値が特定される状態

####■演算方法
●関係代数
　1.和集合演算：含まれるレコードをだす
　　select * from a union all select * from b
　2.差集合演算：存在しないレコードをだす
　　select * from a EXCEPT select * from b
　　★その他
　　NOT IN, NOT EXISTS, LEFT JOIN, MINUS等
　3.積演算（共通集合）：一致するレコードを出す
　　select * from a,b where 検索条件(a.列名 = b.列名)
　4.直積演算：全ての組み合わせレコードを出す
　　select * from a,b ※where条件が無いと全ての組み合わせが返される
●関係演算
　5.選択演算
　　select * from x where y=1; ※テーブル「x」から列「y」が1のレコードを取得する
　6.射影演算：必要な列を取り出す
　　select x from y;　※テーブル「y」から列「x」を取得
　7.結合演算
　　二つのテーブルを共通の属性で結び付けた関係。
　8.商演算
　　いわゆる割り算だがSQLは複雑になる。

####等結合
　同一カラムで結合する
　カラムは重複して表示される

　・テーブル定義
　　X(A,B,C)
　　Y(D,F,C)

　・SELECT * FROM X JOIN Y ON X.C=Y.C

　・結果
　　A,B,C,D,F,C

####自然結合
　同一カラムで結合する。　カラムは重複しない

　・テーブル定義
　　X(A,B,C)
　　Y(D,F,C)
　
　・SELECT * FROM X NATURAL JOIN Y 

　・結果
　　A,B,C,D,F

---
###DBMS

#####■トランザクション管理

######ACID特性

　1.原子性(Atomicity)
　2.一貫性(Conistency)
　　※直列可能性(Serializability)を満たす
　3.独立性(Isolation)
　4.耐久性(Durability)、障害耐久性、持続性とも

#####ロック

　・ロックの種類
　　・共有ロック：データ参照時のロック。他のトランザクションから参照可能
　　・占有ロック：データ更新時のロック。他のトランザクションから参照不可
　・ロックの粒度
　　・行ロック
　　・テーブルロック
　・直列可能性
　　複数のトランザクションを実行した結果と完全に独立して順番に実行した結果が同一になること。
　・デッドロック
　　別々のトランザクションが各々がロックしているテーブルの開放待ちで処理不能になっている状態。

#####トランザクションの分離レベル

|レベル|ダーティリード|アンリピータブルリード|ファントムリード|
|:--|:-:|:-:|:-:|
|READ UNCOMMITTED|〇|〇|〇|
|READ COMMITTED|×|〇|〇|
|REPETABLE READ|×|×|〇|
|SERIALIZABLE|×|×|×|

 ・ダーティリード
　　T1がデータを更新する
　　T2が更新されたデータを読み込む
　　T1がロールバックされる
　　T2は存在しない値を読み込んだことになる
　・ノンリピータブルリード(再現不可能な読み)
　　同じトランザクションで複数回の読込みを行ったとき、
　　読込む度に値が変わってしまう異常。2回の読込みの間に、
　　別のトランザクションがそのデータを更新したことが原因で発生する。
　・ファントムリード
　　同じトランザクションで複数回の読込みを行ったとき、
　　前回は存在しなかった行が現れる異常。
　　2回の読込みの間に、別のトランザクションがテーブルに行を挿入したことが原因で発生する。

####■障害回復処理
DBMSは障害に備えログを取得している

・ログの種類
　・更新前ログ
　・更新後ログ
・コミット
　トランザクションが確定する。
　通常はアプリ（プログラム）側で明記する。
・チェックポイント
　HDDの更新は遅延防止のためチェックポイント（一定間隔）で実施する。
　通常DBMSにより自動で実施される。
・ロールバック
　障害発生時にトランザクション開始前に戻す
・ロールフォワード
　障害発生時にコミット完了時の状態に戻す


####■分散データベース
・地理的に離れた場所にある複数のデータベースを論理的に1つのデータベースとしてアクセスできるようにしたもの。データベースを利用時に、データベースが複数の場所に離れていることを意識せずに利用するために求められる性質を「透過性」とう。
次の6種類があります。

|No|名称|説明|
|:--|:--|:--|
|1|位置に対する透過性(location transparency)|DBが配置されている位置を意識せずにデータベースを利用できること|
|2|移動に対する透過性(migration transparency)|データ格納サイトが変更されても、利用者のアプリケーションや操作方法に影響がないこと|
|3|分割に対する透過性(fragmentation transparency)|一つの表が複数のサイトに分割されても意識せずに利用できる|
|4|複製に対する透過性(replication transparency)|同一データが複数サイトに保存されても意識せずに利用できる|
|5|障害に対する透過性(failure transparency)|あるサイトで障害発生時、意識せずに利用できる|
|6|データモデルに対する透過性(data model transparency)|各サイトのDBMSが扱うデータモデルが異なっていても意識せずに利用できる|
---