主キーと外部キー、トランザクション管理と排他制御


主キーと外部キー

 行を特定したり、表と表に関係を持たせたりするためには、
 主キーや外部キーという「鍵となる情報」が必要です。

 主キー
 データベースの表には、その中の行ひとつひとつを識別できるように、キーとなる
 情報が含まれている。これを主キーと呼ぶ。
 また、一つの列では一意にならないが、複数の列を組み合せば一意になるキーのことを
 複合キーと呼ぶ
 

 外部キー
 表と表とを関係付けるため、他の表の主キーを参照する列のことを外部キーと呼ぶ
 

トランザクション管理とは処理のかたまり

 データベースでは、一覧の処理をひとまとめにしたものをトランザクションと呼ぶ
 データベースは、このトランザクション単位で更新処理を管理している。

排他制御とは

 排他制御は処理中のデータをロックして、他の人が読み下記できないようにする機能。
 トランザクションの間、使用するデータをロックしておけば誰かに割り込まれて
 データの不整合が生じたりする恐れがなくなる

ロックの種類

 共有ロック
 他のユーザはデータを読むことはできるが、編集はできない

 専有ロック
 他のユーザはデータを読むことも、書くこともできない

 ※ロック機能を使う場合に注意しないと、「お互いがお互いのロック解除を永遠に待ち続ける」というデットロックが発生する。
 

トランザクションに求められるACID特性

 トランザクション処理に対して4つの特性が必須とされている。それぞれの頭文字をとってACID特定と呼ばれる
 
 Atomicity(原子性)
 トランザクションの処理結果は「すべて実行されるか」「まったく実行されないか」のいずれかで終了すること。
 中途半端に一部だけ実行されるようなことを許容しない。

 Consistency(一貫性)
 データベースの内容が矛盾のない状態であること。トランザクションの処理結果が、矛盾を生じさせるようなことに
 なってはいけない。

 IsoIation(隔離性)
 複数のトランザクションを同時に実行した場合と順番に実行した場合の処理結果が一致すること。

 Durability(耐久性)
 正常に終了したトランザクションの更新結果は生涯が発生してもデータベースから消失しないこと。

ストアドプロシージャ

 データベースを操作する一連の処理手順をひとつのプログラムにまとめ、データベース管理システム(DBMS)側にあらかじめ保存しておくことを
 ストアドプロシージャと呼ぶ

データベースの障害管理

 データベースの霜害回復には、バックアップやジャーナルファイルを使う
 データベースは生涯の発生に備えて定期的にバックアップを取ることが基本
 また、バックアップ後の更新は、ジャーなると呼ばれるログファイルに更新前の状態(更新前ジャーナル)
 と更新後の状態(更新後ジャーナル)を随一記憶して、データベースの更新履歴を管理するようにしている。
 障害が発生した場合はこれらのファイルを使用してロールバックロールフォワードなおの障害回復処理
 を行い元の状態に復旧している。

コミット、ロールバック

 コミット
 一連の処理が問題なく完了できた時、最後にその更新を確定することで、データベースへと更新内容を反映させる。

 ロールバック
 データベース更新前の状態を更新前ジャーナルから取得してデータベースをトランザクション開始直前の状態まで戻す

分散データベースと2相コミット

 物理的に分かれている複数のデータベースを見かけ上ひとつのデータベースとして扱えるようにしたシステム
 分散データベースシステムと呼ぶ
 分散データベースではトランザクション処理が各サイトに渡って行われるため全体の動機をとってコミットやロールバック
 を行うようにしないと一部のサイトだけが更新されたりしてデータの整合性が取れなくなってしまう。
 前妻とに対してコミットができるか問い合わせを行い、その結果を見てコミットもしくはロールバックを行う
 この方式を2相コミットと呼ぶ

データベースを復旧させるロールフォワード

 トランザクションの処理中ではなく、ディスク障害など突然データベースが故障してしまった場合は
 ベータベースに行った更新情報をバックアップ移行の更新後ジャーナルから取得してデータベースを障害発生
 直前の状態にまで復旧させる
 バックアップファイルによる復元から、ここに至るまでの一連の処理をロールフォワードと呼ぶ

 

以上