1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

データベースについて

Last updated at Posted at 2021-11-03

データベースとは

いろんなデータがある中で、独立したもの、繋がっているものさまざま
これらを一つにまとめて一括管理しているものがデータベース

データベース管理システム(Date Base Management System)

基本・応用ソフトウェアは膨大なデータを蓄積しており、これらを管理している
アプリケーションには欠かすことのできないミドルウェアである

関係型データベース

表・行・列の形でデータを管理しており主流のデータベース
データが行単位で積み重なって表になる

  • 表(テーブル)
        データを入れる場所

  • 行(レコード、組、タプル)
    1件分のデータのこと

  • 列(データを構成する各項目)

要は表計算ソフトみたいな見た目

リレーショナルデータベース(RDB: Relational Datebase)

データの内容により複数の表と関連付けし扱うデータベースのこと
関係型データベースがまさにこれ

表を正規化する

新たな情報を更新する際に、古いものもそのまま残ったりということがないよう、表を分けて管理する
スクリーンショット 2021-09-13 20.54.41.png
スクリーンショット 2021-09-13 20.55.29.png

正規化はミス防止のための予防処置になるし、業務の効率化にもつながる

関係演算

蓄積されたデータはいくつかの方法によって効率よく活用することができる

 * 選択
    行を取り出す演算で、特定のデータを取り出すことも可能
 
 * 射影
    列を取り出す演算で、特定の列を取り出すことも可能 

 * 結合
    共通の列を介すことで、表と表を合体させる演算

ビュー表

関係演算によって作った仮想的な表のこと

スキーマ

データベースの構造や使用を定義する

データベース規格であるANSI/X3/SPARCは3層スキーマ構造となっている

スキーマ.png

  • 外部スキーマ
    ビュー表などユーザやプログラムに必要なデータを提供する
    プログラムが変更されても影響はここで対応する

  • 概念スキーマ
    データベース本体のことで、独立性が保たれている

  • 内部スキーマ
    データを物理的に記憶させることやハードウェアの変更についてここで対応してくれる

メリットは

  • データの構造を変えなくてもビュー表はいじれる
  • ハードウェアが変わってもプログラムの修正は必要ない

主キーと外部キー

主キー

表の中の行を識別するためのもの

例えば、社員番号や出席番号など唯一無二となるもの
名前などは同姓同名がいる可能性があるので主キーとはならない

主キーの条件は

  • 表の中で内容が重複していない
  • 内容が空ではない

外部キー

関連付けした別の表の主キーのこと

複合キー

1つの列では主キーにならないが、複数の列を組み合わせると主キーとなるもの

例えば...
スクリーンショット 2021-11-03 23.31.34.png

このように学年の列だけでは複数人いて主キーにならないが、出席番号も組み合わせると
唯一無二の番号になる

正規化

正規化を実行することで、データに矛盾や重複を生じさせない

正規化には正規形という段階がある

  • 非正規形

    正規化されていない表で繰り返し部分を持つ
    

スクリーンショット 2021-11-03 23.33.01.png

このように色がついた部分が繰り返しとなっている

  • 第1正規形

    繰り返し部分を省き、1つの行として独立させた形

スクリーンショット 2021-11-03 23.34.35.png

色のついた繰り返されていた部分を新たな行として存在させている

  • 第2正規形

   部分関数従属している列を切り出した形

スクリーンショット 2021-11-03 23.39.07.png
スクリーンショット 2021-11-03 23.48.38.png

スクリーンショット 2021-11-03 23.52.38.png

このように1つの表を3種類の表に正規化した

関数従属

主キーに対して特定の列が定まるもの

例えば、
社員番号があるならば、必ず名前や部署が存在する

スクリーンショット 2021-11-03 23.44.20.png

これが関係従属である

部分関数従属

複合キーの一部の項目で特定の列が定まるもの

例えば、複合キーとして受注No.と商品コードがあるならば

スクリーンショット 2021-11-03 23.45.55.png

このように

  • 受注No.があれば、受注日付、顧客コード、顧客名称は必ず存在する
  • 商品コードがあれば、商品名、単価は必ず存在する

これが部分関係従属である

  • 第3正規形
    主キー以外の列に関係従属している列を切り出した形

スクリーンショット 2021-11-03 23.56.34.png

ここから
スクリーンショット 2021-11-03 23.57.38.png

新たに顧客表として分離される

この顧客コードがあるということは必ず顧客名称が存在する
つまり顧客コードが主キーとなりうる

このように正規化は極限まで表を分解し管理する

SQL

SQLとは

データベース管理システム(DBMS)に指示を与えるための
プログラミング言語のこと

SQLを使いデータを貯め込むだけではなく、
あらゆる条件のもとデータを抽出し有効活用することができる

SQLのまとめ記事

よろしければご覧ください

SQLについて[まとめ]

トランザクション管理と排他制御

トランザクションとは

一連の処理を処理をひとまとめにしたもの

例えば、
1.お客さんから在庫の問い合わせがあった
2.在庫を確認する(在庫確認)
3.販売
4.在庫数を減らしデータを更新する(在庫更新)

この2と4の流れが一連の処理であり、データベースはトランザクション単位で更新処理を管理する

排他制御

例えば、先程のやりとりが同時に別のところで行われていたとしたら...
2人とも同じ在庫数を見ているので、そこから1つ減らして更新する
つまり在庫は2つ減るはずなのに、1つしか減らない

このようなミスが起きないように排他制御、つまりロックする方法がある

  • 共有ロック
    他のユーザは読むことはできるが書き込むことはできない

  • 専有ロック
    他のユーザは読み書きできない

デッドロック

複数のトランザクションが絡んだ作業の時には、それぞれがそれぞれのデータにロックをかけてしまい、
次の作業に使いたいデータにお互い入れない事象が起きる

この場合はトランザクションを強制的に解除するしかない

ACID特性

データベース管理システムがトランザクションのために必要な特性を表している

  • Atomicity(原子性)
    トランザクション処理は実行するかしないかしかない
    つまり中途半端な処理で終わることはできない

  • Consistency(一貫性)
    処理結果に矛盾が起きてはいけない

  • Isolation(隔離性)
    複数のトランザクションを実行しても処理結果に矛盾が生じてはいけない

  • Durability(耐久性)
    トランザクションの更新結果は終了後にトラブルが起きても、消去されていない
    状態でなければいけない
    何かしら復旧手段が確保されていないとダメ

ストアドプロシージャ

SQL文で書かれた処理手順をプロシージャというプログラムに入れておき、それをデータベース管理システムに
保存しておくこと

メリット

  • クライアントがプロシージャを選ぶだけで、そく実行できるので
    処理が早い
  • ネットワーク負荷の軽減につながる

データベース障害管理

バックアップ

データベースが壊れ他時に備えて、常日頃からバックアップをとっておく必要がある

ジャーナル

バックアップをとってからの情報を記録するログファイルのこと

ジャーナルには

  • 更新後ジャーナル(更新後の状態)
  • 更新前ジャーナル(更新前の状態)

が随時記録されて、データベース更新履歴を管理している

コミット

トランザクションの一連処理が全て終了し更新された時に、初めてデータベースに内容が反映されること

トランザクションは中途半端に処理を終わらせることは許されないので、
処理が無事に終了し、最後の更新まで完了しなければデータベースの内容も反映できない

ロールバック

トランザクションの処理中に障害が発生した場合、最後まで処理が完了しない場合がある
そんな時にジャーナルに記録されていた、更新前ジャーナルのデータを取得し、処理開始直前に戻る処理のこと

ロールバック.png

分散データベースシステム

物理的に離れた場所にある複数のデータベースをひとつのデータベースとして扱うこと

2相コミット

トランザクションが行われた場合は、当然全データベースに内容が反映されなくてはいけない

なので、

1.主となるデータベースから、各地にコミット可能か確認する
2.OKと返答が来る
3.コミットもしくはロールバック(障害発生時)を指示

この方式を2相コミットという

ロールフォワード

例えば、
突然ディスク障害が発生した場合、日々残していたバックアップファイルから復元を行う
更新後の情報は、ジャーナルの更新後ジャーナルを取得して、バックアップファイルに内容を反映させる

ロールフォワード.png

これで復旧完了

この一連をロールフォワードという

参考書籍

きたみりゅうじ 『キタミ式 イラストIT塾 基本情報技術者 令和03年』 技術評論社 2020年

1
5
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
1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?