0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

まとめ 基本情報技術者 データベースについて

Posted at

出題される単語について

ビュー

  • 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特性

    • 障害回復

      • バックアップファイル

        データベース全体を保存しているファイル

      • ログファイル

        • トランザクションの前後を保存したファイル
          • 更新前ログファイル(トランザクション前)
          • 更新後ログファイル(トランザクション後)
      • ロールバック

        • トランザクション中の障害
        • トランザクション中の障害時に、「更新前ログファイル」を使って、「トランザクション開始前」に戻すこと
      • ロールフォワード

        • トランザクション後の障害
        • トランザクション後の障害時に、「バックアップファイル」と「更新後ログファイル」を使って、「トランザクション完了後」に戻すこと
  • 排他制御

    • 複数の人が「同じデータ」を「更新」したときに、「データに矛盾が生じない」ようにすること
    • 専有ロック
      • 更新時に利用
      • 「ロックをかけたトランザクション」のみが「データを読み書きできる」
      • 他のトランザクション🙅
    • 共通ロック
      • 「ロックをかけたトランザクションと他のトランザクション」の両方が、「データの読み出しのみ」行える
      • 他の共通ロックのみトランザクション👌
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?