A社の佐伯さんがのらりくらりと

A社の佐伯さんがのらりくらりと。インターネットと少しだけ生活のこと。

うろ覚えだった知識をまとめてみたよ【データベース編②】

学習エントリ。 全体的な知識の底上げをすべく、復習も兼ねてまとめてみる。

正規化

表を分割して、データの重複を排除すること。重複を防くことは不整合の発生を防ぐことにつながる。不整合は新旧のデータが混在することによって起きる。なるべく重複を無くし、更新を管理する。

関数従属

IDでユーザが特定できるなど「Aを特定すれば、Bが特定される」という関係を関数従属という。B(ユーザ)はA(ID)に関数従属する、という。書き方は「A→B」。

非正規形

ひとつの行に複数のデータが入っているなど、繰り返しの項目をもつ表。関係データベースでは扱えない。最低でも以下の第1正規形に変形する必要がある。

第1正規形

繰り返し項目を持たない、単純な表。単純=一行に複数のデータが入っていない。しかし依然として重複する情報は存在するので、不整合を防止できない。

第2正規形

第1正規形の条件を満たしており、非キー属性が主キーに完全関数従属する(主キーで全部特定できる)ように表を分ける。完全では無いが、不整合の防止効果はある。ちなみに完全従属とは、複数主キーがあった場合、一部のみに関数従属していたりせず、主キー要素すべてに関数従属するもの。

第3正規形

第2正規形の条件を満たしており、非キー属性が主キーに推移的時間数従属しない。まずは主キー以外の関数従属を洗い出し、もしあればそれを別の表に分ける。分けた先の主キーとなる要素は残しておく。第3正規形になると情報が重複して記録される箇所が無いので、不整合の発生をより抑えられる。ちなみに推移的関数従属とはA→B→Cのように関数従属が推移、繋がっていくもの。例えば「受注番号→顧客番号→顧客名」を「受注番号→顧客番号」「顧客番号→顧客名」に分ける。

正規化の利点と欠点

利点は不整合の発生を防ぐことができること。欠点は正規化を進めれば進めるほど、様々な表を見なければならないため、アクセスに時間がかかる。

DBMS(DataBase Management System)

DBとユーザを仲介する仕組み。ユーザが指示したSQLDBMSによって処理され、結果がユーザに返される。

ACID

DBの一連の処理はトランザクション単位で実行される。トランザクションは関連する一連の処理のこと。例えば ① 口座Aから◯◯円出金 ② 口座Bへ◯◯円入金 これらの処理はひとまとまりの仕事であり、片方だけ実行されるということがあってはならない。このように関連する一連の手順をまとめたものをトランザクションという。 ACIDはトランザクションが持つべき特徴を表す。 * 原子性:トランザクションは「すべてを実行する」か「全く実行しない」のどちらか。 * 一貫性:トランザクションの実行結果はDBの内容を矛盾させない。 * 独立性、隔離性:並列同時に実行している他のトランザクションの影響を受けない。 * 持続性、耐久性:正常に終了したトランザクションの更新結果は、システムの障害などでも消失しない。

すべてを実行することを「コミット」、全く実行しない状態に戻すことを「ロールバック」という。トランザクションは必ずどちらかで終了しないといけない。

2相コミットメント制御

上記の例で口座AとBが別々のDBを使っている場合もある。このように情報を様々な箇所で管理しているDBを分散データベースという。分散データベースでは、2相コミットメント制御を行ってコミット・ロールバックする。システムからの指示に対して、どちらからも準備完了応答(ACK)が返ってきたら両方のDBに対してコミット指示を行う。もしひとつでもエラー応答(NACK)が返ってきたら両方に対してロールバック指示を行う。

参考

https://www.amazon.co.jp/%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9%E3%83%9A%E3%83%83%E3%82%AF%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85-%E5%B9%B3%E6%88%9028%E5%B9%B4%E5%BA%A6-%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93-TAC%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E8%AC%9B%E5%BA%A7/dp/4813265545www.amazon.co.jp