Dbms-quick-guide

提供:Dev Guides
移動先:案内検索

DBMS-概要

  • データベース*は関連データのコレクションであり、データは情報を生成するために処理できる事実と図のコレクションです。

ほとんどのデータは記録可能な事実を表します。 データは、事実に基づいた情報の生成を支援します。 たとえば、すべての学生が取得したマークに関するデータがある場合、トッパーと平均マークについて結論付けることができます。

  • データベース管理システム*は、情報の取得、操作、生成が簡単になるようにデータを保存します。

特徴

従来、データはファイル形式で整理されていました。 当時のDBMSは新しい概念であり、すべての調査は、従来のスタイルのデータ管理の欠陥を克服するために行われました。 現代のDBMSには次の特性があります-

  • 現実世界のエンティティ-最新のDBMSはより現実的であり、現実世界のエンティティを使用してアーキテクチャを設計します。 動作と属性も使用します。 たとえば、学校のデータベースでは、生徒をエンティティとして使用し、年齢を属性として使用します。
  • リレーションベースのテーブル-DBMSでは、エンティティとそれらの間の関係がテーブルを形成できます。 ユーザーは、テーブル名を見るだけでデータベースのアーキテクチャを理解できます。
  • データとアプリケーションの分離-データベースシステムは、データとはまったく異なります。 データベースはアクティブなエンティティですが、データはパッシブであると言われ、その上でデータベースが機能し整理されます。 DBMSは、独自のプロセスを容易にするために、データに関するデータであるメタデータも保存します。
  • 低冗長性-DBMSは正規化の規則に従い、属性のいずれかに値の冗長性がある場合に関係を分割します。 正規化は、データの冗長性を減らす数学的に豊富で科学的なプロセスです。
  • 一貫性-一貫性とは、データベース内のすべての関係の一貫性が維持される状態です。 データベースが一貫性のない状態になろうとする試みを検出できる方法と手法があります。 DBMSは、ファイル処理システムのような以前の形式のデータ保存アプリケーションと比較して、より高い一貫性を提供できます。
  • クエリ言語-DBMSにはクエリ言語が装備されているため、データの取得と操作がより効率的になります。 ユーザーは、一連のデータを取得するために必要な数の異なるフィルタリングオプションを適用できます。 従来、ファイル処理システムが使用されていた場所では不可能でした。
  • * ACIDプロパティ*-DBMSは、* A トミシティ、 C 一貫性、 I * solation、* D *耐久性(通常はACIDとして短縮されます)の概念に従います。 これらの概念は、データベース内のデータを操作するトランザクションに適用されます。 ACIDプロパティは、マルチトランザクション環境や障害が発生した場合にデータベースを正常に保つのに役立ちます。
  • マルチユーザーおよび同時アクセス-DBMSはマルチユーザー環境をサポートし、データへのアクセスとデータの並行操作を可能にします。 ただし、ユーザーが同じデータ項目を処理しようとすると、トランザクションに制限がありますが、ユーザーは常にそれらに気付きません。
  • 複数のビュー-DBMSは、さまざまなユーザーに複数のビューを提供します。 営業部門にいるユーザーは、本番部門で働いている人とは異なるデータベースのビューを持ちます。 この機能により、ユーザーは要件に応じてデータベースを集中的に表示できます。
  • セキュリティ-複数のビューなどの機能は、ユーザーが他のユーザーや部門のデータにアクセスできない場合に、ある程度のセキュリティを提供します。 DBMSは、データベースにデータを入力し、後の段階で同じデータを取得する際に制約を課す方法を提供します。 DBMSは、さまざまなレベルのセキュリティ機能を提供します。これにより、複数のユーザーがさまざまな機能のさまざまなビューを持つことができます。 たとえば、営業部門のユーザーは、購入部門に属するデータを表示できません。 さらに、営業部門のデータをユーザーに表示する量を管理することもできます。 DBMSは従来のファイルシステムのようにディスクに保存されないため、悪党がコードを解読することは非常に困難です。

ユーザー

典型的なDBMSには、さまざまな目的で使用するさまざまな権限と許可を持つユーザーがいます。 データを取得するユーザーとバックアップするユーザーがいます。 DBMSのユーザーは、次のように大きく分類することができます-

image

  • 管理者-管理者はDBMSを管理し、データベースの管理を担当します。 彼らは、その使用法と誰によって使用されるべきかを管理する責任があります。 ユーザーのアクセスプロファイルを作成し、制限を適用して分離を維持し、セキュリティを強制します。 管理者は、システムライセンス、必要なツール、その他のソフトウェアおよびハードウェア関連のメンテナンスなどのDBMSリソースにも注意を払っています。
  • デザイナー-デザイナーは、データベースの設計部分で実際に作業する人々のグループです。 彼らはどのデータをどのフォーマットで保存するかを注意深く見守っています。 エンティティ、関係、制約、およびビューのセット全体を識別および設計します。
  • エンドユーザー-エンドユーザーは、DBMSを持つことの利点を実際に享受する人です。 エンドユーザーは、ログや市場レートに注意を払う単純な視聴者から、ビジネスアナリストなどの高度なユーザーまでさまざまです。

DBMS-アーキテクチャ

DBMSの設計は、そのアーキテクチャに依存します。 集中化または分散化または階層化できます。 DBMSのアーキテクチャは、単一層または複数層のいずれかと見なすことができます。 n層アーキテクチャは、システム全体を関連する独立した n モジュールに分割します。これらのモジュールは、独立して変更、変更、変更、または交換できます。

1層アーキテクチャでは、DBMSは、ユーザーがDBMSに直接座って使用する唯一のエンティティです。 ここで行われた変更は、DBMS自体で直接行われます。 エンドユーザーに便利なツールは提供しません。 データベース設計者およびプログラマーは通常、単一層アーキテクチャーを使用することを好みます。

DBMSのアーキテクチャが2層の場合、DBMSにアクセスできるアプリケーションが必要です。 プログラマは、アプリケーションを使用してDBMSにアクセスする2層アーキテクチャを使用します。 ここで、アプリケーション層は、操作、設計、プログラミングの点でデータベースから完全に独立しています。

3層アーキテクチャ

3層アーキテクチャは、ユーザーの複雑さと、データベースに存在するデータの使用方法に基づいて、層を相互に分離します。 DBMSを設計するために最も広く使用されているアーキテクチャです。

image

  • データベース(データ)層-この層では、データベースはクエリ処理言語とともに存在します。 このレベルでデータとその制約を定義する関係もあります。
  • アプリケーション(中間)層-この層には、アプリケーションサーバーとデータベースにアクセスするプログラムが存在します。 ユーザーにとって、このアプリケーション層はデータベースの抽象化されたビューを提供します。 エンドユーザーは、アプリケーション以外にデータベースが存在することを知りません。 一方、データベース層は、アプリケーション層以外のユーザーを認識していません。 したがって、アプリケーション層は中間に位置し、エンドユーザーとデータベース間の仲介役として機能します。
  • ユーザー(プレゼンテーション)層-エンドユーザーはこの層で操作し、この層を超えたデータベースの存在については何も知りません。 この層では、アプリケーションによってデータベースの複数のビューを提供できます。 すべてのビューは、アプリケーション層にあるアプリケーションによって生成されます。

多層データベースアーキテクチャは、ほとんどすべてのコンポーネントが独立しており、独立して変更できるため、高度に変更可能です。

DBMS-データモデル

データモデルは、データベースの論理構造をモデル化する方法を定義します。 データモデルは、DBMSに抽象化を導入するための基本的なエンティティです。 データモデルは、データを相互に接続する方法と、システム内で処理および保存する方法を定義します。

最初のデータモデルは、使用されるすべてのデータが同じ平面に保持されるフラットデータモデルです。 以前のデータモデルはそれほど科学的ではなかったため、多くの重複を導入し、異常を更新する傾向がありました。

エンティティ関係モデル

エンティティ関係(ER)モデルは、実世界のエンティティとそれらの間の関係の概念に基づいています。 データベースモデルに現実のシナリオを定式化する間、ERモデルはエンティティセット、関係セット、一般的な属性および制約を作成します。

ERモデルは、データベースの概念設計に最適です。

ERモデルはに基づいています-

  • *エンティティ*とその_attributes._
  • エンティティ間の*関係*。

これらの概念を以下に説明します。

image

  • エンティティ-ERモデルのエンティティは、*属性*と呼ばれるプロパティを持つ実世界のエンティティです。 すべての*属性*は、*ドメイン*と呼ばれる値のセットによって定義されます。 たとえば、学校のデータベースでは、学生はエンティティと見なされます。 学生には、名前、年齢、クラスなどのさまざまな属性があります。
  • 関係-エンティティ間の論理的な関連付けは relationship と呼ばれます。 関係はさまざまな方法でエンティティとマッピングされます。 カーディナリティのマッピングは、2つのエンティティ間の関連付けの数を定義します。 +カーディナリティのマッピング-
  • 一対一
  • 一対多
  • 多対一
  • 多対多

リレーショナルモデル

DBMSで最も一般的なデータモデルは、リレーショナルモデルです。 他のモデルよりも科学的なモデルです。 このモデルは、1次述語論理に基づいており、テーブルを* n-aryリレーション*として定義します。

リレーショナルモデルテーブル

このモデルの主なハイライトは次のとおりです-

  • データは relations と呼ばれるテーブルに保存されます。
  • 関係は正規化できます。
  • 正規化された関係では、保存される値はアトミック値です。
  • リレーションの各行には一意の値が含まれます。
  • リレーションの各列には、同じドメインの値が含まれます。

DBMS-データスキーマ

データベーススキーマ

データベーススキーマは、データベース全体の論理ビューを表すスケルトン構造です。 データの編成方法とデータ間の関係の関連付け方法を定義します。 データに適用されるすべての制約を定式化します。

データベーススキーマは、エンティティとエンティティ間の関係を定義します。 データベースの説明的な詳細が含まれており、スキーマダイアグラムを使用して表示できます。 プログラマーがデータベースを理解し、便利にするためにスキーマを設計するのはデータベース設計者です。

image

データベーススキーマは大きく2つのカテゴリに分けることができます-

  • 物理データベーススキーマ-このスキーマは、データの実際のストレージと、ファイル、インデックスなどのストレージの形式に関するものです。 セカンダリストレージにデータを保存する方法を定義します。
  • 論理データベーススキーマ-このスキーマは、保存されたデータに適用する必要があるすべての論理制約を定義します。 テーブル、ビュー、および整合性制約を定義します。

データベースインスタンス

これら2つの用語を個別に区別することが重要です。 データベーススキーマは、データベースのスケルトンです。 データベースがまったく存在しない場合に設計されています。 データベースが動作可能になると、データベースに変更を加えることは非常に困難です。 データベーススキーマには、データや情報は含まれません。

データベースインスタンスは、特定の時点でのデータを含む運用データベースの状態です。 データベースのスナップショットが含まれています。 データベースインスタンスは時間とともに変化する傾向があります。 DBMSは、データベース設計者が課したすべての検証、制約、および条件を熱心に追跡することにより、すべてのインスタンス(状態)が有効な状態であることを保証します。

DBMS-データの独立性

データベースシステムが多層化されていない場合、データベースシステムに変更を加えることは困難になります。 データベースシステムは、以前に学んだように多層で設計されています。

データの独立性

通常、データベースシステムには、ユーザーのデータに加えて多くのデータが含まれています。 たとえば、メタデータと呼ばれるデータに関するデータを保存して、データを簡単に見つけて取得します。 データベースに保存されたメタデータのセットを変更または更新するのはかなり困難です。 ただし、DBMSが拡張されると、ユーザーの要件を満たすために時間とともに変化する必要があります。 データ全体が依存している場合、面倒で非常に複雑なジョブになります。

データの独立性

メタデータ自体は階層化されたアーキテクチャに従っているため、ある層でデータを変更しても、別のレベルのデータには影響しません。 このデータは独立していますが、相互にマッピングされています。

論理データの独立性

論理データは、データベースに関するデータです。つまり、内部でのデータの管理方法に関する情報を格納します。 たとえば、データベースに保存されているテーブル(リレーション)とそのリレーションに適用されるすべての制約。

論理データの独立性は一種のメカニズムであり、ディスクに保存されている実際のデータから自由になります。 テーブル形式を変更しても、ディスクにあるデータは変更されません。

物理データの独立性

すべてのスキーマは論理的であり、実際のデータはビット形式でディスクに保存されます。 物理データの独立性は、スキーマまたは論理データに影響を与えることなく物理データを変更する力です。

たとえば、ストレージシステム自体を変更またはアップグレードする場合-ハードディスクをSSDに置き換えたい場合-論理データやスキーマに影響を与えないようにします。

ERモデル-基本概念

ERモデルは、データベースの概念図を定義します。 実世界のエンティティとそれらの間の関連付けを回避します。 ビューレベルでは、ERモデルはデータベースの設計に適したオプションと見なされます。

エンティティ

エンティティは、簡単に識別できる実世界のオブジェクト(アニメーションまたは無生物)にすることができます。 たとえば、学校のデータベースでは、提供される生徒、教師、クラス、およびコースをエンティティと見なすことができます。 これらすべてのエンティティには、それらにアイデンティティを与えるいくつかの属性またはプロパティがあります。

エンティティセットは、類似したタイプのエンティティのコレクションです。 エンティティセットには、同様の値を共有する属性を持つエンティティが含まれる場合があります。 たとえば、学生セットには学校のすべての学生が含まれる場合があります。同様に、教師セットには、すべての学部の学校のすべての教師を含めることができます。 エンティティセットはばらばらである必要はありません。

属性

エンティティは、*属性*と呼ばれるプロパティによって表されます。 すべての属性には値があります。 たとえば、学生のエンティティには、名前、クラス、年齢が属性として含まれている場合があります。

属性に割り当てることができるドメインまたは値の範囲が存在します。 たとえば、生徒の名前を数値にすることはできません。 アルファベットでなければなりません。 学生の年齢を負にすることはできません。

属性の種類

  • シンプル属性-シンプル属性は原子値であり、さらに分割することはできません。 たとえば、学生の電話番号は10桁の原子値です。
  • 複合属性-複合属性は、複数の単純属性で構成されます。 たとえば、学生の完全な名前にはfirst_nameとlast_nameが含まれる場合があります。
  • 派生属性-派生属性は、物理データベースには存在しない属性ですが、その値はデータベースに存在する他の属性から派生しています。 たとえば、部門のaverage_salaryをデータベースに直接保存するのではなく、導出できます。 別の例として、年齢はdata_of_birthから導出できます。
  • 単一値属性-単一値属性には単一値が含まれます。 たとえば-Social_Security_Number。
  • 複数値属性-複数値属性には複数の値を含めることができます。 たとえば、人は複数の電話番号、email_addressなどを持つことができます。

これらの属性タイプは、次のような方法でまとめることができます-

  • 単純な単一値属性
  • 単純な多値属性
  • 複合単一値属性
  • 複合多値属性

エンティティセットとキー

キーは、エンティティセットの中でエンティティを一意に識別する属性または属性のコレクションです。

たとえば、学生のroll_numberは、学生の間で識別可能にします。

  • Super Key -エンティティセット内のエンティティを集合的に識別する一連の属性(1つ以上)。
  • 候補キー-最小限のスーパーキーは候補キーと呼ばれます。 エンティティセットには、複数の候補キーがある場合があります。
  • プライマリキー-プライマリキーは、エンティティセットを一意に識別するためにデータベース設計者が選択した候補キーの1つです。

関係

エンティティ間の関連付けは、関係と呼ばれます。 たとえば、従業員は部門に works_at 、学生はコースに*登録*します。 ここでは、Works_atとEnrollsを関係と呼びます。

関係セット

同様のタイプの関係のセットは、関係セットと呼ばれます。 エンティティと同様に、関係も属性を持つことができます。 これらの属性は、*記述属性*と呼ばれます。

関係度

関係に参加するエンティティの数は、関係の程度を定義します。

  • バイナリ=次数2
  • 三項= 3次
  • n項=度

カーディナリティのマッピング

  • カーディナリティ*は、1つのエンティティセット内のエンティティの数を定義します。これは、関係セットを介して他のセットのエンティティの数に関連付けることができます。
  • 1対1 -エンティティセットAの1つのエンティティは、エンティティセットBの多くても1つのエンティティに関連付けることができ、その逆も可能です。
  • * 1対多*-エンティティセットAの1つのエンティティは、エンティティセットBの複数のエンティティに関連付けることができますが、エンティティセットBのエンティティは最大1つのエンティティに関連付けることができます。
  • 多対一-エンティティセットAの複数のエンティティは、エンティティセットBの最大1つのエンティティに関連付けることができますが、エンティティセットBのエンティティは、エンティティセットAの複数のエンティティに関連付けることができます。
  • 多対多-Aの1つのエンティティをBの複数のエンティティに関連付けることができ、逆も同様です。

ER図の表現

ここで、ERモデルがER図によってどのように表されるかを学びましょう。 エンティティ、エンティティの属性、関係セット、関係セットの属性などのオブジェクトは、ERダイアグラムの助けを借りて表すことができます。

エンティティ

エンティティは長方形で表されます。 長方形は、それらが表すエンティティセットで名前が付けられます。

学校データベース内のエンティティ

属性

属性はエンティティのプロパティです。 属性は楕円で表されます。 すべての楕円は1つの属性を表し、そのエンティティ(長方形)に直接接続されています。

単純な属性

属性が composite の場合、それらはさらに構造のようなツリーに分割されます。 すべてのノードは、その属性に接続されます。 つまり、複合属性は、楕円に接続された楕円で表されます。

複合属性

  • 複数値*属性は二重の楕円で表されます。

複数値属性

  • 派生*属性は破線の楕円で表されます。

派生属性

関係

関係は、菱形のボックスで表されます。 関係の名前は、ダイアモンドボックス内に記載されています。 リレーションシップに参加しているすべてのエンティティ(四角形)は、線で接続されています。

バイナリ関係とカーディナリティ

2つのエンティティが参加する関係は、「バイナリ関係」と呼ばれます。 カーディナリティは、関係に関連付けることができる関係からのエンティティのインスタンスの数です。

  • 1対1 -エンティティの1つのインスタンスのみが関係に関連付けられている場合、「1:1」としてマークされます。 次の図は、各エンティティの1つのインスタンスのみが関係に関連付けられることを示しています。 1対1の関係を示しています。
  • * 1対多*-エンティティの複数のインスタンスが関係に関連付けられている場合、「1:N」としてマークされます。 次の画像は、左側のエンティティの1つのインスタンスと右側のエンティティの複数のインスタンスのみが関係に関連付けることができることを反映しています。 1対多の関係を示しています。
  • 多対一-エンティティの複数のインスタンスが関係に関連付けられている場合、「N:1」としてマークされます。 次の画像は、左側のエンティティの複数のインスタンスと、右側のエンティティの1つのインスタンスのみが関係に関連付けられることを示しています。 多対1の関係を示しています。
  • 多対多-次の画像は、左側のエンティティの複数のインスタンスと右側のエンティティの複数のインスタンスを関係に関連付けることができることを示しています。 多対多の関係を示しています。

参加の制約

  • 合計参加-各エンティティは関係に関与しています。 総参加は二重線で表されます。
  • 部分参加-すべてのエンティティが関係に関与しているわけではありません。 部分的な参加は単一行で表されます。

参加の制約

汎化集約

ERモデルには、データベースエンティティを概念的な階層方式で表現する機能があります。 階層が上がると、エンティティのビューが一般化され、階層を深くすると、含まれるすべてのエンティティの詳細がわかります。

この構造で上に行くことは*一般化*と呼ばれ、エンティティはより一般化されたビューを表すために一緒にクラブされます。 たとえば、Miraという名前の特定の学生をすべての学生とともに一般化できます。 エンティティは学生であり、さらに学生は人です。 その逆は「専門化」と呼ばれ、人は学生であり、その学生はミラです。

一般化

前述のように、一般化されたエンティティにすべての一般化されたエンティティのプロパティが含まれるエンティティを一般化するプロセスは、一般化と呼ばれます。 一般化では、類似の特性に基づいて、多くのエンティティが1つの一般化されたエンティティにまとめられます。 たとえば、鳩、家すずめ、カラス、鳩はすべて鳥として一般化できます。

一般化

特化

専門化は一般化の反対です。 専門分野では、エンティティのグループは、その特性に基づいてサブグループに分割されます。 たとえば、グループ「個人」を考えてみましょう。 人には名前、生年月日、性別などがあります。 これらの特性は、すべての人、人間に共通です。 しかし、企業では、従業員、雇用主、顧客、またはベンダーとして、会社で果たす役割に基づいて個人を特定できます。

スペシャライゼーション

同様に、学校のデータベースでは、個人が学校でエンティティとしてどのような役割を果たしているかに基づいて、教師、学生、またはスタッフとして専門化することができます。

継承

オブジェクト指向プログラミングでオブジェクトのクラスを作成するために、ERモデルの上記の機能をすべて使用します。 通常、エンティティの詳細はユーザーには表示されません。このプロセスは abstraction として知られています。

継承は、一般化と専門化の重要な機能です。 これにより、下位レベルのエンティティが上位レベルのエンティティの属性を継承できます。

継承

たとえば、名前、年齢、性別などのPersonクラスの属性は、StudentやTeacherなどの下位レベルのエンティティに継承できます。

コッドの12ルール

エドガー・F博士 データベースシステムのリレーショナルモデルに関する広範な調査の後、Coddは独自の12のルールを思い付きました。彼によれば、データベースは真のリレーショナルデータベースと見なされるために従う必要があります。

これらのルールは、リレーショナル機能のみを使用して保存されたデータを管理する任意のデータベースシステムに適用できます。 これは基本ルールであり、他のすべてのルールのベースとして機能します。

ルール1:情報ルール

データベースに保存されるデータは、ユーザーデータまたはメタデータの場合もありますが、何らかのテーブルセルの値でなければなりません。 データベース内のすべてのものはテーブル形式で保存する必要があります。

ルール2:保証されたアクセスルール

すべての単一のデータ要素(値)は、table-name、primary-key(行の値)、およびattribute-name(列の値)の組み合わせで論理的にアクセス可能であることが保証されています。 ポインターなどの他の手段を使用してデータにアクセスすることはできません。

ルール3:NULL値の体系的な処理

データベース内のNULL値には、体系的で統一された処理が必要です。 これは非常に重要なルールです。NULLは次のように解釈される可能性があるためです。データが欠落している、データが不明、またはデータが適用できない。

ルール4:アクティブなオンラインカタログ

データベース全体の構造記述は、 data dictionary と呼ばれるオンラインカタログに保存する必要があります。このカタログには、許可されたユーザーがアクセスできます。 ユーザーは、同じクエリ言語を使用して、データベース自体へのアクセスに使用するカタログにアクセスできます。

ルール5:包括的なデータサブ言語ルール

データベースには、データ定義、データ操作、およびトランザクション管理操作をサポートする線形構文を持つ言語を使用してのみアクセスできます。 この言語は、直接使用することも、アプリケーションを使用して使用することもできます。 データベースがこの言語の助けなしでデータへのアクセスを許可する場合、それは違反と見なされます。

ルール6:ビュー更新ルール

理論的に更新できるデータベースのすべてのビューも、システムによって更新可能でなければなりません。

規則7:高レベルの挿入、更新、および削除規則

データベースは、高レベルの挿入、更新、削除をサポートする必要があります。 これは単一の行に制限されてはなりません。つまり、データレコードのセットを生成するために、結合、交差、およびマイナスの操作もサポートする必要があります。

ルール8:物理データの独立性

データベースに保存されるデータは、データベースにアクセスするアプリケーションから独立している必要があります。 データベースの物理構造の変更は、外部アプリケーションによるデータへのアクセス方法に影響を与えてはなりません。

ルール9:論理データの独立性

データベース内の論理データは、ユーザーのビュー(アプリケーション)から独立している必要があります。 論理データの変更は、それを使用するアプリケーションに影響してはなりません。 たとえば、2つのテーブルがマージされるか、1つが2つの異なるテーブルに分割される場合、ユーザーアプリケーションに影響や変更はありません。 これは、適用が最も難しいルールの1つです。

ルール10:完全性の独立

データベースは、それを使用するアプリケーションから独立している必要があります。 すべての整合性制約は、アプリケーションを変更することなく独立して変更できます。 このルールにより、データベースはフロントエンドアプリケーションとそのインターフェイスから独立します。

ルール11:配布の独立性

エンドユーザーは、データがさまざまな場所に分散されていることを確認できてはなりません。 ユーザーは常に、データが1つのサイトのみにあるという印象を受ける必要があります。 このルールは、分散データベースシステムの基盤と見なされています。

規則12:非転覆規則

システムに低レベルのレコードへのアクセスを提供するインターフェースがある場合、そのインターフェースはシステムを破壊し、セキュリティと整合性の制約を回避できてはなりません。

関係データモデル

リレーショナルデータモデルは、データストレージとデータ処理のために世界中で広く使用されている主要なデータモデルです。 このモデルはシンプルで、データをストレージ効率で処理するために必要なすべてのプロパティと機能を備えています。

概念

テーブル-リレーショナルデータモデルでは、リレーションはテーブルの形式で保存されます。 この形式は、エンティティ間の関係を保存します。 テーブルには行と列があり、行はレコードを表し、列は属性を表します。

タプル-そのリレーションの単一のレコードを含むテーブルの単一の行は、タプルと呼ばれます。

リレーションインスタンス-リレーショナルデータベースシステムのタプルの有限セットは、リレーションインスタンスを表します。 リレーションインスタンスには、重複するタプルはありません。

リレーションスキーマ-リレーションスキーマは、リレーション名(テーブル名)、属性、およびそれらの名前を記述します。

リレーションキー-各行にはリレーションキーと呼ばれる1つ以上の属性があり、リレーション(テーブル)の行を一意に識別できます。

属性ドメイン-すべての属性には、属性ドメインと呼ばれる事前定義された値の範囲があります。

制約

すべての関係には、有効な関係であるために保持する必要があるいくつかの条件があります。 これらの条件は Relational Integrity Constraints と呼ばれます。 3つの主な整合性制約があります-

  • 主な制約
  • ドメインの制約
  • 参照整合性制約

主な制約

リレーションには、タプルを一意に識別できる属性の最小サブセットが少なくとも1つ必要です。 この最小限の属性のサブセットは、そのリレーションの*キー*と呼ばれます。 そのような最小サブセットが複数ある場合、これらは candidate keys と呼ばれます。

主な制約はそれを強制する-

  • キー属性を持つリレーションでは、2つのタプルがキー属性に対して同じ値を持つことはできません。
  • キー属性にNULL値を含めることはできません。

キー制約は、エンティティ制約とも呼ばれます。

ドメインの制約

実際のシナリオでは、属性には特定の値があります。 たとえば、年齢は正の整数のみです。 同じ制約が、リレーションの属性に採用されようとしました。 すべての属性は、特定の範囲の値を持つようにバインドされています。 たとえば、年齢を0未満にすることはできず、電話番号に0〜9以外の数字を含めることはできません。

参照整合性の制約

参照整合性制約は、外部キーの概念で機能します。 外部キーは、他のリレーションで参照できるリレーションのキー属性です。

参照整合性制約は、リレーションが異なるリレーションまたは同じリレーションのキー属性を参照する場合、そのキー要素が存在する必要があることを示しています。

リレーショナル代数

リレーショナルデータベースシステムには、ユーザーがデータベースインスタンスを照会するのに役立つクエリ言語が装備されていることが期待されています。 クエリ言語には、リレーショナル代数とリレーショナル計算の2種類があります。

リレーショナル代数

リレーショナル代数は手続き型クエリ言語であり、リレーションのインスタンスを入力として受け取り、リレーションのインスタンスを出力として生成します。 演算子を使用してクエリを実行します。 演算子は unary または binary のいずれかです。 入力としてリレーションを受け入れ、出力としてリレーションを生成します。 関係代数は関係に対して再帰的に実行され、中間結果も関係と見なされます。

関係代数の基本的な操作は次のとおりです-

  • 選択する
  • プロジェクト
  • 連合
  • 別のセット
  • デカルト積
  • リネーム

これらすべての操作については、次のセクションで説明します。

操作を選択(σ)

リレーションから指定された述語を満たすタプルを選択します。

表記-σ〜p〜(r)

ここで、σ*は選択述語を表し、 *r は関係を表します。 _p_は、* and、or、、 *not などのコネクタを使用できる前置論理式です。 これらの用語では、-=、≠、≥、<、>、≤などの関係演算子を使用できます。

-

σsubject = "database"(Books)

出力-件名が「データベース」である書籍からタプルを選択します。

σsubject = "database" and price = "450"(Books)

出力-件名が「データベース」で「価格」が450の書籍からタプルを選択します。

σsubject = "database" and price = "450" or year > "2010"(Books)

出力-件名が「データベース」で「価格」が450の書籍または2010年以降に出版された書籍からタプルを選択します。

プロジェクト運営(∏)

指定された述語を満たす列を投影します。

表記法-∏〜A〜[.small]#1#〜、A〜[.small]#2#〜、A〜[.small]#n#~~(r)

ここで、A〜[.small]#1#〜、A〜[.small]#2#〜、A〜[.small]#n#〜はリレーション r の属性名です。

リレーションはセットなので、重複行は自動的に削除されます。

-

∏subject, author (Books)

リレーションブックから件名および作成者として名前が付けられた列を選択および投影します。

連合作戦(∪)

それは2つの与えられた関係の間でバイナリ結合を実行し、次のように定義されます-

r ∪ s = { t | t ∈ r or t ∈ s}

表記-r U s

ここで、 r および s は、データベースリレーションまたはリレーション結果セット(一時リレーション)です。

ユニオン操作を有効にするには、次の条件が満たされている必要があります-

  • r および s には同じ数の属性が必要です。
  • 属性ドメインは互換性がなければなりません。
  • 重複するタプルは自動的に削除されます。
∏ author (Books) ∪ ∏ author (Articles)

出力-本または記事、あるいはその両方を書いた著者の名前を投影します。

差を設定(−)

差集合演算の結果はタプルです。タプルは1つの関係に存在しますが、2番目の関係にはありません。

表記- r - s

*r* に存在し、 *s* には存在しないすべてのタプルを検索します。
∏ author (Books) − ∏ author (Articles)

出力-本は書いたが記事は書いていない著者の名前を提供します。

デカルト積(Χ)

2つの異なる関係の情報を1つに結合します。

表記-rΧs

ここで rs は関係であり、それらの出力は次のように定義されます-

rΧs = \ {q t | q∈rおよびt∈s}

σauthor = 'finddevguides'(Books Χ Articles)

出力-finddevguidesによって書かれたすべての本と記事を示す関係を生成します。

名前変更操作(ρ)

関係代数の結果も関係ですが、名前はありません。 名前変更操作により、出力関係の名前を変更できます。 「名前変更」操作は、小さなギリシャ文字 rho _ρ_で示されます。

表記-ρ〜x〜(E)

E の結果が x の名前で保存される場所。

追加の操作は-

  • 交差点を設定
  • 割り当て
  • 自然結合

関係計算

リレーショナル代数とは対照的に、リレーショナル計算は非手続き型のクエリ言語です。つまり、何をすべきかを指示しますが、その方法を説明しません。

関係計算は2つの形式で存在します-

タプル関係計算(TRC)

タプル上の変数範囲のフィルタリング

表記-\ {T |調子}

条件を満たすすべてのタプルTを返します。

-

{ T.name |  Author(T) AND T.article = 'database' }

出力-「データベース」に関する記事を書いた著者から「名前」を持つタプルを返します。

TRCは定量化できます。 Existential(∃)およびUniversal Quantifiers(∀)を使用できます。

-

{ R| ∃T   ∈ Authors(T.article='database' AND R.name=T.name)}

出力-上記のクエリでは、前のクエリと同じ結果が得られます。

ドメイン関係計算(DRC)

DRCでは、フィルタリング変数はタプル値全体ではなく属性のドメインを使用します(上記のTRCで行われます)。

表記-

\ {a〜[.small]#1#〜、a〜[.small]#2#〜、a〜[.small]#3#〜、…​、a〜[.small]#n#〜| P(a〜[.small]#1#〜、a〜[.small]#2#〜、a〜[.small]#3#〜、…​ 、a〜[.small]#n#〜)}

ここで、a1、a2は属性であり、 P は内部属性によって作成された数式を表します。

-

{< article, page, subject > |  ∈ finddevguides ∧ subject = 'database'}

出力-件名がデータベースであるfinddevguidesリレーションから記事、ページ、件名を生成します。

TRCと同様に、DRCは実存的および汎用量指定子を使用して記述することもできます。 DRCには関係演算子も含まれます。

Tuple Relation CalculusおよびDomain Relation Calculusの表現力は、Relational Algebraと同等です。

ERモデルからリレーショナルモデル

ERモデルを図に概念化すると、エンティティ関係の概要がわかりやすくなり、わかりやすくなります。 ERダイアグラムはリレーショナルスキーマにマップできます。つまり、ERダイアグラムを使用してリレーショナルスキーマを作成できます。 すべてのER制約をリレーショナルモデルにインポートすることはできませんが、おおよそのスキーマを生成できます。

ERダイアグラムをリレーショナルスキーマに変換するために利用できるいくつかのプロセスとアルゴリズムがあります。 それらの一部は自動化されており、一部は手動です。 ここでは、図の内容からリレーショナルの基本へのマッピングに焦点を当てます。

ER図は主に-

  • エンティティとその属性
  • 関係。エンティティ間の関連付けです。

マッピングエンティティ

エンティティは、いくつかの属性を持つ実世界のオブジェクトです。

マッピングエンティティ

マッピングプロセス(アルゴリズム)

  • エンティティごとにテーブルを作成します。
  • エンティティの属性は、それぞれのデータ型を持つテーブルのフィールドになります。
  • 主キーを宣言します。

マッピング関係

関係は、エンティティ間の関連付けです。

マッピング関係

マッピングプロセス

  • 関係のテーブルを作成します。
  • 参加しているすべてのエンティティの主キーを、それぞれのデータ型を持つテーブルのフィールドとして追加します。
  • 関係に属性がある場合、各属性をテーブルのフィールドとして追加します。
  • 参加エンティティのすべての主キーを構成する主キーを宣言します。
  • すべての外部キー制約を宣言します。

弱いエンティティセットのマッピング

弱いエンティティセットは、プライマリキーが関連付けられていないものです。

弱いエンティティセットのマッピング

マッピングプロセス

  • 弱いエンティティセットのテーブルを作成します。
  • すべての属性をフィールドとしてテーブルに追加します。
  • エンティティセットを識別する主キーを追加します。
  • すべての外部キー制約を宣言します。

階層エンティティのマッピング

ERの専門化または一般化は、階層エンティティセットの形式で提供されます。

階層エンティティのマッピング

マッピングプロセス

  • すべての高レベルエンティティのテーブルを作成します。
  • 下位レベルのエンティティのテーブルを作成します。
  • 下位エンティティのテーブルに上位エンティティの主キーを追加します。
  • 下位レベルのテーブルで、下位レベルのエンティティの他のすべての属性を追加します。
  • 上位テーブルの主キーと下位テーブルの主キーを宣言します。
  • 外部キー制約を宣言します。

SQLの概要

SQLは、リレーショナルデータベース用のプログラミング言語です。 関係代数とタプル関係計算に基づいて設計されています。 SQLは、RDBMSのすべての主要なディストリビューションを備えたパッケージとして提供されます。

SQLは、データ定義言語とデータ操作言語の両方で構成されています。 SQLのデータ定義プロパティを使用すると、データベーススキーマを設計および変更できますが、データ操作プロパティを使用すると、SQLでデータベースにデータを保存および取得できます。

データ定義言語

SQLは、次の一連のコマンドを使用してデータベーススキーマを定義します-

作成

RDBMSから新しいデータベース、テーブル、およびビューを作成します。

-

Create database finddevguides;
Create table article;
Create view for_students;

DROP

RDBMSからコマンド、ビュー、テーブル、およびデータベースを削除します。

-

Drop object_type object_name;
Drop database finddevguides;
Drop table article;
Drop view for_students;

ALTER

データベーススキーマを変更します。

Alter object_type object_name parameters;

-

Alter table article add subject varchar;

このコマンドは、文字列タイプの subject という名前のリレーション*記事*に属性を追加します。

データ操作言語

SQLにはデータ操作言語(DML)が装備されています。 DMLは、データを挿入、更新、削除することにより、データベースインスタンスを変更します。 DMLは、データベース内のすべてのフォームデータの変更を担当します。 SQLは、そのDMLセクションに次のコマンドセットが含まれています-

  • SELECT/FROM/WHERE
  • INTO/VALUESに挿入
  • 更新/設定/場所
  • どこからでも削除

これらの基本構造により、データベースプログラマーとユーザーは、データベースにデータと情報を入力し、多くのフィルターオプションを使用して効率的に取得できます。

SELECT/FROM/WHERE

  • SELECT -これはSQLの基本的なクエリコマンドの1つです。 関係代数の射影操作に似ています。 WHERE句で記述された条件に基づいて属性を選択します。
  • FROM -この句は、属性を選択/投影する引数として関係名を取ります。 複数の関係名が指定されている場合、この句はデカルト積に対応します。
  • WHERE -この句は、投影される属性を修飾するために一致する必要がある述語または条件を定義します。

-

Select author_name
From book_author
Where age > 50;

このコマンドは、年齢が50歳を超えるリレーション book_author から著者の名前を生成します。

INTO/VALUESに挿入

このコマンドは、テーブルの行に値を挿入するために使用されます(リレーション)。

構文-

INSERT INTO table (column1 [, column2, column3 ... ]) VALUES (value1 [, value2, value3 ... ])

Or

INSERT INTO table VALUES (value1, [value2, ... ])

-

INSERT INTO finddevguides (Author, Subject) VALUES ("anonymous", "computers");

更新/設定/場所

このコマンドは、テーブルの列の値を更新または変更するために使用されます(リレーション)。

構文-

UPDATE table_name SET column_name = value [, column_name = value ...] [WHERE condition]

-

UPDATE finddevguides SET Author="webmaster" WHERE Author="anonymous";

削除/FROM/WHERE

このコマンドは、テーブルから1つ以上の行を削除するために使用されます(関係)。

構文-

DELETE FROM table_name [WHERE condition];

-

DELETE FROM finddevguidess
   WHERE Author="unknown";

DBMS-正規化

機能依存性

機能依存性(FD)は、リレーションの2つの属性間の制約のセットです。 機能的な依存関係によると、2つのタプルの属性A1、A2、…​、Anの値が同じ場合、これらの2つのタプルの属性B1、B2、…​、Bnの値は同じである必要があります。

機能的な依存関係は、矢印記号(→)、つまりX→Yで表されます。Xは機能的にYを決定します。 左側の属性は、右側の属性の値を決定します。

アームストロングの公理

Fが機能的な依存関係のセットである場合、F ^ + ^として示されるFの閉包は、Fによって論理的に暗示されるすべての機能的な依存関係のセットです。 Armstrongの公理は一連のルールであり、繰り返し適用されると機能的な依存関係の閉鎖を生成します。

  • 再帰ルール-アルファが属性のセットであり、ベータがアルファのis_subset_ofである場合、アルファはベータを保持します。
  • 拡張ルール-a→bが成り立ち、yが属性設定されている場合、ay→byも成り立ちます。 それは依存関係に属性を追加することであり、基本的な依存関係は変更しません。
  • 推移性ルール-代数の推移性ルールと同じ。a→bが成り立ち、b→cが成り立つ場合、a→cも成り立つ。 a→bは、bを決定する関数として呼び出されます。

些細な機能依存

  • Trivial -機能的依存関係(FD)X→Yが成り立つ場合(YはXのサブセット)、それは自明なFDと呼ばれます。 単純なFDは常に有効です。
  • 非自明-FD X→Yが成り立つ場合、YはXのサブセットではないので、非自明FDと呼ばれます。
  • 完全に非自明-FD X→Yが成り立つ場合、xがY =Φと交差する場合、完全に自明ではないFDと言われます。

正規化

データベース設計が完全でない場合、異常が含まれている可能性があり、これはデータベース管理者にとっては悪い夢のようです。 異常を伴うデータベースの管理はほとんど不可能です。

  • 更新の異常-データ項目が散在し、互いに適切にリンクされていない場合、奇妙な状況につながる可能性があります。 たとえば、コピーが複数の場所に散らばっている1つのデータ項目を更新しようとすると、いくつかのインスタンスが適切に更新され、他のいくつかのインスタンスには古い値が残ります。 このようなインスタンスは、データベースを一貫性のない状態のままにします。
  • 削除の異常-レコードを削除しようとしましたが、その一部が認識されないために削除されずに残っており、データも別の場所に保存されています。
  • 異常の挿入-まったく存在しないレコードにデータを挿入しようとしました。

正規化は、これらすべての異常を取り除き、データベースを一貫した状態にする方法です。

最初の標準形

最初の正規形は、関係(テーブル)自体の定義で定義されます。 このルールは、リレーションのすべての属性にアトミックドメインが必要であることを定義します。 アトミックドメインの値は分割できない単位です。

未整理の関係

以下のようにリレーション(テーブル)を再配置し、それを最初の正規形に変換します。

1NFの関係

各属性には、定義済みのドメインからの単一の値のみが含まれている必要があります。

第2正規形

私たちは2番目の正規形について学ぶ前に、次を理解する必要があります-

  • プライム属性-候補キーの一部である属性は、プライム属性として知られています。
  • 非プライム属性-プライムキーの一部ではない属性は、非プライム属性と呼ばれます。

2番目の標準形式に従う場合、すべての非プライム属性は完全に機能的にプライムキー属性に依存する必要があります。 つまり、X→Aが成り立つ場合、Yの適切なサブセットYが存在してはならず、Y→Aも成り立ちます。

2NF以外の関係

ここで、Student_Projectリレーションでは、プライムキー属性がStu_IDとProj_IDであることがわかります。 ルールによれば、非キー属性、つまり Stu_NameとProj_Nameは、主キー属性に個別に依存するのではなく、両方に依存する必要があります。 ただし、Stu_NameはStu_IDで識別でき、Proj_NameはProj_IDで個別に識別できることがわかります。 これは*部分依存性*と呼ばれ、第2正規形では許可されていません。

2NFの関係

上記の図に示すように、2つの関係を壊しました。 したがって、部分的な依存関係は存在しません。

第3正規形

関係が第3正規形であるためには、第2正規形である必要があり、次の条件を満たす必要があります-

  • プライムキー属性に推移的に依存する非プライム属性はありません。
  • 自明でない機能的依存関係の場合、X→A、次に
  • Aは主要な属性です。

3NF以外の関係

上記のStudent_detail関係では、Stu_IDがキーで唯一のプライムキー属性であることがわかります。 Cityは、Stu_IDとZip自体によって識別できることがわかります。 Zipはスーパーキーでも、Cityも主要な属性ではありません。 さらに、Stu_ID→Zip→Cityであるため、*推移的な依存関係*が存在します。

この関係を第3の正規形にするには、次のように関係を2つの関係に分けます-

3NFの関係

ボイスコッド標準形

Boyce-Codd Normal Form(BCNF)は、厳密な用語でのThird Normal Formの拡張です。 BCNFの状態-

  • 自明でない機能依存関係、X→Aの場合、Xはスーパーキーでなければなりません。

上の画像では、Stu_IDはリレーションStudent_Detailのスーパーキーであり、ZipはリレーションZipCodesのスーパーキーです。 So,

Stu_ID→Stu_Name、Zip

and

郵便番号→都市

これは、両方の関係がBCNFにあることを確認します。

DBMS-結合

2つの関係のデカルト積を取ることの利点を理解しています。これにより、ペアになっているすべての可能なタプルが得られます。 しかし、特定のケースでは、かなりの数の属性を持つ数千のタプルとの巨大な関係に遭遇するデカルト積を取るのは現実的でないかもしれません。

*Join* は、デカルト積とそれに続く選択プロセスの組み合わせです。 結合操作は、特定の結合条件が満たされた場合にのみ、異なる関係から2つのタプルをペアにします。

次のセクションで、さまざまな結合タイプについて簡単に説明します。

シータ(θ)結合

シータ結合は、シータ条件を満たしていれば、異なるリレーションのタプルを組み合わせます。 結合条件は、記号*θ*で示されます。

記法

R1 ⋈θ R2

R1とR2は、属性(A1、A2、..、An)および(B1、B2、.. 、Bn)属性に共通点がないようにします。つまり、R1∩R2 =Φです。

シータ結合では、あらゆる種類の比較演算子を使用できます。

学生

SID

Name

Std

101

Alex

10

102

マリア

11

科目

クラス

件名

10

Math

10

英語

11

音楽

11

スポーツ

Student_Detail-

STUDENT ⋈Student.Std = Subject.Class SUBJECT

Student_detail

SID

Name

Std

クラス

件名

101

Alex

10

10

Math

101

Alex

10

10

英語

102

マリア

11

11

音楽

102

マリア

11

11

スポーツ

等結合

Theta結合が equality 比較演算子のみを使用する場合、等価結合と呼ばれます。 上記の例は、等結合に対応しています。

自然結合(⋈)

自然結合では、比較演算子は使用されません。 デカルト積のようには連結しません。 2つのリレーション間に少なくとも1つの共通属性が存在する場合にのみ、Natural Joinを実行できます。 さらに、属性は同じ名前とドメインを持っている必要があります。

自然結合は、両方の関係の属性の値が同じである一致する属性に作用します。

コース

CID

コース

Dept

CS01

データベース

CS

ME01

力学

ME

EE01

エレクトロニクス

EE

HoD

Dept

Head

CS

Alex

ME

Maya

EE

Mira

コース⋈HoD

Dept

CID

コース

Head

CS

CS01

データベース

Alex

ME

ME01

力学

Maya

EE

EE01

エレクトロニクス

Mira

外部結合

シータ結合、等結合、および自然結合は、内部結合と呼ばれます。 内部結合には、一致する属性を持つタプルのみが含まれ、残りは結果のリレーションで破棄されます。 そのため、外部結合を使用して、結果の関係に参加関係からのすべてのタプルを含める必要があります。 外部結合には、左外部結合、右外部結合、完全外部結合の3種類があります。

左外部結合(R 左外部結合、幅= 24 S)

左の関係Rからのすべてのタプルは、結果の関係に含まれます。 RightリレーションSに一致するタプルがないRにタプルがある場合、結果のリレーションのS属性はNULLになります。

Left

A

B

100

データベース

101

力学

102

エレクトロニクス

A

B

100

Alex

102

Maya

104

Mira

コース左外部結合、幅= 24 HoD

A

B

C

D

100

データベース

100

Alex

101

力学

102

エレクトロニクス

102

Maya

右外部結合:(R 右外部結合、幅= 24 S)

RightリレーションシップのすべてのタプルSは、結果のリレーションシップに含まれます。 Rに一致するタプルのないSにタプルがある場合、結果のリレーションのR属性はNULLになります。

コース右外部結合、幅= 13 HoD

A

B

C

D

100

データベース

100

Alex

102

エレクトロニクス

102

Maya

104

Mira

完全外部結合:(R 完全外部結合、幅= 16 S)

両方の参加関係からのすべてのタプルは、結果の関係に含まれます。 両方のリレーションに一致するタプルがない場合、それぞれの一致しない属性はNULLになります。

コース完全外部結合、幅= 13 HoD

A

B

C

D

100

データベース

100

Alex

101

力学

102

エレクトロニクス

102

Maya

104

Mira

DBMS-ストレージシステム

データベースは、レコードを含むファイル形式で保存されます。 物理レベルでは、実際のデータは一部のデバイスに電磁形式で保存されます。 これらのストレージデバイスは、大きく3つのタイプに分類することができます-

メモリの種類

  • プライマリストレージ-CPUに直接アクセスできるメモリストレージはこのカテゴリに属します。 CPUの内部メモリ(レジスタ)、高速メモリ(キャッシュ)、およびメインメモリ(RAM)は、すべてマザーボードまたはCPUチップセットに配置されているため、CPUに直接アクセスできます。 このストレージは通常、非常に小さく、超高速で、揮発性です。 プライマリストレージは、その状態を維持するために継続的な電源供給が必要です。 停電の場合、すべてのデータが失われます。
  • セカンダリストレージ-セカンダリストレージデバイスは、将来の使用またはバックアップとしてデータを保存するために使用されます。 セカンダリストレージには、CPUチップセットまたはマザーボードの一部ではないメモリデバイスが含まれます。たとえば、磁気ディスク、光ディスク(DVD、CDなど)、ハードディスク、フラッシュドライブ、磁気テープなどです。
  • 三次ストレージ-三次ストレージは、大量のデータを保存するために使用されます。 このようなストレージデバイスはコンピューターシステムの外部にあるため、速度が最も遅くなります。 これらのストレージデバイスは、システム全体のバックアップを取るために主に使用されます。 光ディスクと磁気テープは、3次ストレージとして広く使用されています。

メモリ階層

コンピュータシステムには、明確に定義されたメモリの階層があります。 CPUは、内蔵メモリと同様にメインメモリに直接アクセスできます。 メインメモリのアクセス時間は、明らかにCPU速度よりも短いです。 この速度の不一致を最小限に抑えるために、キャッシュメモリが導入されています。 キャッシュメモリは最速のアクセス時間を提供し、CPUが最も頻繁にアクセスするデータが含まれています。

最も高速なアクセスのメモリが最も高価です。 大きなストレージデバイスは速度が遅く、安価ですが、CPUレジスタやキャッシュメモリに比べて大量のデータを保存できます。

磁気ディスク

ハードディスクドライブは、現在のコンピューターシステムで最も一般的な二次記憶装置です。 これらは、磁化の概念を使用して情報を保存するため、磁気ディスクと呼ばれます。 ハードディスクは、磁化可能な材料でコーティングされた金属ディスクで構成されています。 これらのディスクは、スピンドルに垂直に配置されます。 読み取り/書き込みヘッドはディスク間を移動し、その下のスポットを磁化または消磁するために使用されます。 磁化スポットは0(ゼロ)または1(1)として認識できます。

ハードディスクは、データを効率的に保存するために、明確に定義された順序でフォーマットされています。 ハードディスクプレートには、「トラック」と呼ばれる同心円が多数あります。 すべてのトラックはさらに*セクター*に分割されます。 ハードディスク上のセクターは、通常512バイトのデータを保存します。

独立ディスクの冗長アレイ

RAIDまたは* R リダンダント A * *I ndependent D *リスクは、複数のセカンダリストレージデバイスを接続し、それらを単一のストレージメディアとして使用する技術です。

RAIDは、さまざまな目標を達成するために複数のディスクが接続されたディスクのアレイで構成されています。 RAIDレベルは、ディスクアレイの使用を定義します。

RAID 0

このレベルでは、ディスクのストライプアレイが実装されます。 データはブロックに分割され、ブロックはディスク間で分散されます。 各ディスクは、並行して書き込み/読み取りを行うデータのブロックを受け取ります。 ストレージデバイスの速度とパフォーマンスが向上します。 レベル0にはパリティとバックアップはありません。

RAID 0

RAID 1

RAID 1はミラーリング技術を使用します。 データがRAIDコントローラーに送信されると、アレイ内のすべてのディスクにデータのコピーが送信されます。 RAIDレベル1は「ミラーリング」とも呼ばれ、障害が発生した場合に100%の冗長性を提供します。

RAID 1

RAID 2

RAID 2は、データのハミング距離を使用して、異なるディスクにストライプ化されたエラー修正コードを記録します。 レベル0と同様に、ワード内の各データビットは個別のディスクに記録され、データワードのECCコードは異なるセットディスクに保存されます。 複雑な構造と高コストのため、RAID 2は市販されていません。

RAID 2

RAID 3

RAID 3は、データを複数のディスクにストライプします。 データワード用に生成されたパリティビットは、別のディスクに保存されます。 この手法により、単一ディスクの障害を克服できます。

RAID 3

RAID 4

このレベルでは、データブロック全体がデータディスクに書き込まれ、パリティが生成されて別のディスクに保存されます。 レベル3はバイトレベルのストライプを使用し、レベル4はブロックレベルのストライプを使用することに注意してください。 レベル3とレベル4の両方で、RAIDを実装するには少なくとも3つのディスクが必要です。

RAID 4

RAID 5

RAID 5はデータブロック全体を異なるディスクに書き込みますが、データブロックストライプ用に生成されたパリティビットは、異なる専用ディスクに保存するのではなく、すべてのデータディスクに分散されます。

RAID 5

RAID 6

RAID 6はレベル5の拡張です。 このレベルでは、2つの独立したパリティが生成され、複数のディスクに分散して保存されます。 2つのパリティにより、追加のフォールトトレランスが提供されます。 このレベルでは、RAIDを実装するために少なくとも4台のディスクドライブが必要です。

image

DBMS-ファイル構造

相対的なデータと情報は、ファイル形式でまとめて保存されます。 ファイルは、バイナリ形式で保存された一連のレコードです。 ディスクドライブは、レコードを保存できる複数のブロックにフォーマットされます。 ファイルレコードは、これらのディスクブロックにマップされます。

ファイル編成

ファイル編成は、ファイルレコードをディスクブロックにマップする方法を定義します。 ファイルレコードを整理するために、4種類のファイル編成があります-

ファイル構成

ヒープファイルの構成

ヒープファイル構成を使用してファイルが作成されると、オペレーティングシステムはそれ以上のアカウンティング詳細なしでそのファイルにメモリ領域を割り当てます。 ファイルレコードは、そのメモリ領域のどこにでも配置できます。 記録を管理するのはソフトウェアの責任です。 ヒープファイルは、それ自体の順序付け、順序付け、またはインデックス付けをサポートしていません。

順次ファイル編成

すべてのファイルレコードには、そのレコードを一意に識別するためのデータフィールド(属性)が含まれています。 順次ファイル編成では、一意のキーフィールドまたは検索キーに基づいて、レコードがいくつかの順序でファイルに配置されます。 実際には、すべてのレコードを物理的な形式で連続して保存することはできません。

ハッシュファイルの構成

ハッシュファイルの編成では、レコードの一部のフィールドでハッシュ関数計算が使用されます。 ハッシュ関数の出力により、レコードが配置されるディスクブロックの場所が決まります。

クラスター化されたファイル編成

クラスタ化されたファイル編成は、大規模なデータベースには適していません。 このメカニズムでは、1つまたは複数の関係からの関連レコードが同じディスクブロックに保持されます。つまり、レコードの順序は主キーまたは検索キーに基づいていません。

ファイル操作

データベースファイルの操作は、大きく2つのカテゴリに分類できます-

  • 更新操作
  • 検索操作

更新操作は、挿入、削除、または更新によってデータ値を変更します。 一方、取得操作はデータを変更しませんが、オプションの条件付きフィルタリングの後に取得します。 どちらのタイプの操作でも、選択は重要な役割を果たします。 ファイルの作成と削除以外にも、ファイルに対して実行できるいくつかの操作があります。

  • 開く-ファイルは、*読み取りモード*または*書き込みモード*の2つのモードのいずれかで開くことができます。 読み取りモードでは、オペレーティングシステムは誰でもデータを変更することを許可しません。 つまり、データは読み取り専用です。 読み取りモードで開かれたファイルは、複数のエンティティ間で共有できます。 書き込みモードでは、データを変更できます。 書き込みモードで開かれたファイルは読み取ることができますが、共有することはできません。
  • Locate -すべてのファイルにはファイルポインターがあり、データの読み取りまたは書き込みを行う現在の位置を示します。 それに応じて、このポインターを調整できます。 検索(シーク)操作を使用して、前後に移動できます。
  • 読み取り-デフォルトでは、ファイルが読み取りモードで開かれると、ファイルポインターはファイルの先頭を指します。 ファイルを開くときに、ユーザーがファイルポインターの場所をオペレーティングシステムに指示できるオプションがあります。 ファイルポインターの次のデータが読み取られます。
  • 書き込み-ユーザーは書き込みモードでファイルを開くことを選択できます。これにより、ファイルの内容を編集できます。 削除、挿入、または変更が可能です。 ファイルポインターは、開くときに見つけることも、オペレーティングシステムで許可されている場合は動的に変更することもできます。
  • 閉じる-これは、オペレーティングシステムの観点から最も重要な操作です。 ファイルを閉じる要求が生成されると、オペレーティングシステム
  • すべてのロックを削除します(共有モードの場合)。
  • データ(変更された場合)を2次ストレージメディアに保存します。
  • ファイルに関連付けられているすべてのバッファとファイルハンドラを解放します。

ここでは、ファイル内のデータの編成が重要な役割を果たします。 ファイル内の目的のレコードへのファイルポインターを見つけるプロセスは、レコードが連続して配置されているかクラスター化されているかに基づいてさまざまです。

DBMS-インデックス作成

データはレコードの形式で保存されます。 すべてのレコードにはキーフィールドがあり、一意に認識されるのに役立ちます。

インデックス作成は、インデックス作成が行われた属性に基づいてデータベースファイルからレコードを効率的に取得するためのデータ構造技術です。 データベースシステムでのインデックス作成は、書籍で見られるものと似ています。

索引付けは、その索引付け属性に基づいて定義されます。 インデックスは、次のタイプにすることができます-

  • プライマリインデックス-プライマリインデックスは、順序付けられたデータファイルで定義されます。 データファイルは*キーフィールド*で並べられます。 通常、キーフィールドはリレーションのプライマリキーです。
  • セカンダリインデックス-セカンダリインデックスは、候補キーであり、すべてのレコードに一意の値を持つフィールド、または重複する値を持つ非キーから生成される場合があります。
  • クラスタリングインデックス-クラスタリングインデックスは、順序付けられたデータファイルで定義されます。 データファイルは、非キーフィールドで並べられます。

順序付けされたインデックスは2種類あります-

  • 密なインデックス
  • スパースインデックス

密なインデックス

密索引では、データベース内の検索キー値ごとに索引レコードがあります。 これにより検索が高速になりますが、インデックスレコード自体を保存するためにより多くのスペースが必要です。 インデックスレコードには、検索キーの値とディスク上の実際のレコードへのポインタが含まれます。

高密度インデックス

スパースインデックス

疎インデックスでは、すべての検索キーに対してインデックスレコードが作成されるわけではありません。 ここのインデックスレコードには、検索キーとディスク上のデータへの実際のポインタが含まれています。 レコードを検索するには、最初にインデックスレコードに進み、データの実際の場所に到達します。 探しているデータがインデックスをたどって直接到達する場所ではない場合、システムは目的のデータが見つかるまで順次検索を開始します。

スパースインデックス

マルチレベルインデックス

インデックスレコードは、検索キー値とデータポインターで構成されます。 マルチレベルインデックスは、実際のデータベースファイルとともにディスクに保存されます。 データベースのサイズが大きくなると、インデックスのサイズも大きくなります。 検索操作を高速化するために、メインメモリにインデックスレコードを保持する必要性は計り知れません。 単一レベルのインデックスを使用すると、大きなサイズのインデックスをメモリに保持できなくなり、複数のディスクアクセスが発生します。

マルチレベルインデックス

マルチレベルインデックスは、インデックスをいくつかの小さなインデックスに分割し、最も外側のレベルを非常に小さくして、メインメモリのどこにでも簡単に収容できる単一のディスクブロックに保存できるようにします。

B ^ [。small]#+#^ツリー

B ^ [。small]##^ツリーは、マルチレベルインデックス形式に従うバランスの取れたバイナリ検索ツリーです。 B ^ [。small]##^ツリーのリーフノードは、実際のデータポインターを示します。 B ^ [。small]##^ツリーは、すべてのリーフノードが同じ高さにとどまり、バランスが取れていることを保証します。 さらに、リーフノードはリンクリストを使用してリンクされます。したがって、B ^ [。small]##^ツリーは、ランダムアクセスとシーケンシャルアクセスをサポートできます。

B ^ [。small]#+#^ツリーの構造

すべてのリーフノードは、ルートノードから等距離にあります。 B ^ [。small]##^ツリーの順序は *n* で、 *n* はすべてのB ^ [。small]##^ツリーに対して固定されています。

B +ツリー

内部ノード-

  • 内部(リーフではない)ノードには、ルートノードを除く少なくとも⌈n/2⌉のポインターが含まれます。
  • 最大で、内部ノードには n ポインターを含めることができます。

リーフノード-

  • リーフノードには、少なくとも⌈n/2⌉レコードポインターと⌈n/2⌉キー値が含まれます。
  • 最大で、リーフノードには n レコードポインターと n キー値を含めることができます。
  • すべてのリーフノードには、次のリーフノードを指す1つのブロックポインター P が含まれ、リンクリストを形成します。

B ^ [。small]#+#^ツリーの挿入

  • B ^ [。small]#+#^ツリーは下から埋められ、各エントリはリーフノードで行われます。
  • 葉ノードがオーバーフローした場合-
  • ノードを2つの部分に分割します。
  • * i =⌊(m + 1)〜[.small]#/2#〜⌋。*のパーティション
  • 最初の i エントリは1つのノードに保存されます。
  • 残りのエントリ(i + 1以降)は新しいノードに移動されます。
  • i ^ [。small] #_ th _#^ キーは、リーフの親で複製されます。
  • 非葉ノードがオーバーフローした場合-
  • ノードを2つの部分に分割します。
  • * i =⌈(m + 1)〜[.small]#/2#〜⌉*でノードを分割します。
  • i までのエントリは1つのノードに保持されます。
  • 残りのエントリは新しいノードに移動します。

B ^ [。small]#+#^ツリーの削除

  • B ^ [。small]#+#^ツリーエントリは、リーフノードで削除されます。
  • ターゲットエントリが検索され、削除されます。
  • 内部ノードの場合は、削除して、左の位置からのエントリに置き換えます。
  • 削除後、アンダーフローがテストされ、
  • アンダーフローが発生した場合は、残りのノードからエントリを配布します。
  • 左から配布できない場合、
  • ノードから直接それに配布します。
  • 左または右から配布できない場合、
  • 左右にノードをマージします。

DBMS-ハッシュ

巨大なデータベース構造の場合、すべてのレベルですべてのインデックス値を検索し、目的のデータブロックに到達して目的のデータを取得することはほとんど不可能です。 ハッシュは、インデックス構造を使用せずにディスク上のデータレコードの直接の場所を計算するための効果的な手法です。

ハッシュは、データレコードのアドレスを生成するためのパラメーターとして検索キーを持つハッシュ関数を使用します。

ハッシュ編成

  • バケット-ハッシュファイルはバケット形式でデータを保存します。 バケットはストレージの単位と見なされます。 通常、バケットには1つの完全なディスクブロックが格納され、ディスクブロックには1つ以上のレコードが格納されます。
  • ハッシュ関数-ハッシュ関数、* h、は、検索キー *K のすべてのセットを実際のレコードが配置されるアドレスにマッピングするマッピング関数です。 これは、検索キーからバケットアドレスまでの機能です。

静的ハッシュ

静的ハッシュでは、検索キー値が提供されると、ハッシュ関数は常に同じアドレスを計算します。 たとえば、mod-4ハッシュ関数が使用される場合、生成されるのは5つの値のみです。 出力アドレスは、その機能に対して常に同じでなければなりません。 提供されるバケットの数は常に変更されません。

静的ハッシュ

操作

  • 挿入-静的ハッシュを使用してレコードを入力する必要がある場合、ハッシュ関数 h は、レコードが保存される検索キー K のバケットアドレスを計算します。 +バケットアドレス= h(K)
  • 検索-レコードを取得する必要がある場合、同じハッシュ関数を使用して、データが保存されているバケットのアドレスを取得できます。
  • 削除-これは単に削除操作が続く検索です。

バケットオーバーフロー

バケットオーバーフローの状態は*衝突*と呼ばれます。 これは、静的ハッシュ関数にとって致命的な状態です。 この場合、オーバーフローチェーンを使用できます。

  • オーバーフローチェーン-バケットがいっぱいになると、同じハッシュ結果に新しいバケットが割り当てられ、前のバケットの後にリンクされます。 このメカニズムは Closed Hashing と呼ばれます。

オーバーフローチェーン

  • 線形探査-ハッシュ関数がデータが既に保存されているアドレスを生成するとき、次の空きバケットがそれに割り当てられます。 このメカニズムは、 Open Hashing と呼ばれます。

リニアプロービング

動的ハッシュ

静的ハッシュの問題は、データベースのサイズが拡大または縮小しても動的に拡大または縮小しないことです。 動的ハッシュは、データバケットが動的にオンデマンドで追加および削除されるメカニズムを提供します。 動的ハッシュは、*拡張ハッシュ*とも呼ばれます。

動的ハッシュのハッシュ関数は、多数の値を生成するために作成され、最初に使用されるのはごくわずかです。

動的ハッシュ

組織

ハッシュ値全体のプレフィックスは、ハッシュインデックスとして取得されます。 バケットアドレスの計算には、ハッシュ値の一部のみが使用されます。 すべてのハッシュインデックスには、ハッシュ関数の計算に使用されるビット数を示す深度値があります。 これらのビットは、2n個のバケットをアドレス指定できます。 これらのビットがすべて消費されると、つまり、すべてのバケットがいっぱいになると、深さの値は線形的に増加し、バケットの2倍が割り当てられます。

操作

  • クエリ-ハッシュインデックスの深さの値を確認し、それらのビットを使用してバケットアドレスを計算します。
  • 更新-上記のようにクエリを実行し、データを更新します。
  • 削除-クエリを実行して目的のデータを見つけ、削除します。
  • 挿入-バケットのアドレスを計算する
  • バケットがすでにいっぱいの場合。
  • さらにバケットを追加します。
  • ハッシュ値にビットを追加します。
  • ハッシュ関数を再計算します。
  • Else
  • バケットにデータを追加し、
  • すべてのバケットがいっぱいの場合は、静的ハッシュの対策を実行します。

データが何らかの順序で編成されており、クエリが一連のデータを必要とする場合、ハッシュは好ましくありません。 データが離散的でランダムな場合、ハッシュが最高のパフォーマンスを発揮します。

ハッシュアルゴリズムは、インデックス作成よりも複雑です。 すべてのハッシュ操作は一定時間で実行されます。

DBMS-トランザクション

トランザクションは、タスクのグループとして定義できます。 単一のタスクは、それ以上分割できない最小の処理単位です。

簡単な取引の例を見てみましょう。 銀行の従業員がAのアカウントからBのアカウントにRs 500を転送するとします。 この非常にシンプルで小さなトランザクションには、いくつかの低レベルのタスクが含まれます。

  • Aのアカウント*
Open_Account(A)
Old_Balance = A.balance
New_Balance = Old_Balance - 500
A.balance = New_Balance
Close_Account(A)
  • Bのアカウント*
Open_Account(B)
Old_Balance = B.balance
New_Balance = Old_Balance + 500
B.balance = New_Balance
Close_Account(B)

ACIDプロパティ

トランザクションはプログラムの非常に小さな単位であり、いくつかの低レベルのタスクを含む場合があります。 データベースシステムのトランザクションは、正確性、完全性を確保するために、* A トミシティ、 C 一貫性、 I 隔離、および D *耐久性(一般にACIDプロパティとして知られる)を維持する必要があります、およびデータの整合性。

  • Atomicity -このプロパティは、トランザクションをアトミックユニットとして扱う必要があること、つまり、すべての操作が実行されるか、まったく実行されないことを示します。 トランザクションが部分的に完了したままになっているデータベースに状態があってはなりません。 状態は、トランザクションの実行前、またはトランザクションの実行/中止/失敗の後に定義する必要があります。
  • 一貫性-データベースは、トランザクション後も一貫した状態を維持する必要があります。 データベースにあるデータに悪影響を与えるトランザクションはありません。 トランザクションの実行前にデータベースが一貫した状態にあった場合、トランザクションの実行後もデータベースの一貫性を保つ必要があります。
  • 耐久性-システムに障害が発生したり再起動した場合でも、データベースは最新の更新をすべて保持できる耐久性が必要です。 トランザクションがデータベース内のデータのチャンクを更新してコミットすると、データベースは変更されたデータを保持します。 データがディスクに書き込まれる前にトランザクションがコミットされてもシステムに障害が発生した場合、システムが動作に戻るとそのデータが更新されます。
  • 分離-複数のトランザクションが同時に並行して実行されているデータベースシステムでは、分離のプロパティにより、すべてのトランザクションが実行され、システム内の唯一のトランザクションであるかのように実行されます。 トランザクションは、他のトランザクションの存在に影響しません。

シリアライズ可能性

マルチプログラミング環境でオペレーティングシステムによって複数のトランザクションが実行されている場合、1つのトランザクションの命令が他のトランザクションとインターリーブされる可能性があります。

  • スケジュール-トランザクションの時系列の実行シーケンスはスケジュールと呼ばれます。 スケジュールには多くのトランザクションを含めることができ、各トランザクションは多数の命令/タスクで構成されます。
  • シリアルスケジュール-1つのトランザクションが最初に実行されるようにトランザクションが調整されるスケジュールです。 最初のトランザクションがそのサイクルを完了すると、次のトランザクションが実行されます。 トランザクションは次々に注文されます。 トランザクションはシリアル方式で実行されるため、このタイプのスケジュールはシリアルスケジュールと呼ばれます。

マルチトランザクション環境では、シリアルスケジュールがベンチマークと見なされます。 トランザクション内の命令の実行シーケンスを変更することはできませんが、2つのトランザクションの命令をランダムに実行することができます。 2つのトランザクションが相互に独立しており、異なるデータセグメントで動作している場合、この実行は問題ありません。ただし、これら2つのトランザクションが同じデータを処理している場合、結果は異なる場合があります。 この常に変化する結果は、データベースを一貫性のない状態にする可能性があります。

この問題を解決するために、トランザクションがシリアル化可能であるか、トランザクション間の等価関係がある場合、トランザクションスケジュールの並列実行を許可します。

等価スケジュール

等価スケジュールは、次のタイプにすることができます-

結果の等価性

2つのスケジュールが実行後に同じ結果を生成する場合、それらは同等の結果であると言われます。 ある値に対しては同じ結果が得られ、別の値のセットに対しては異なる結果が得られる場合があります。 そのため、この同等性は一般に重要とは見なされません。

同等の表示

両方のスケジュールのトランザクションが同様の方法で同様のアクションを実行する場合、2つのスケジュールは同等と見なされます。

たとえば-

  • TがS1で初期データを読み取る場合、S2で初期データも読み取ります。
  • TがSでJによって書き込まれた値を読み取る場合、SでJによって書き込まれた値も読み取ります。
  • TがS1のデータ値に対して最終書き込みを実行する場合、S2のデータ値に対して最終書き込みも実行します。

競合同等

次のプロパティがある場合、2つのスケジュールは競合します-

  • 両方とも別々のトランザクションに属します。
  • 両方が同じデータ項目にアクセスします。
  • そのうちの少なくとも1つは「書き込み」操作です。

操作が競合する複数のトランザクションを持つ2つのスケジュールは、次の場合にのみ競合と同等と言われます-

  • 両方のスケジュールには、同じトランザクションのセットが含まれています。
  • 競合する操作のペアの順序は、両方のスケジュールで維持されます。

注意-ビューと同等のスケジュールはシリアル化可能ビューであり、競合と同等のスケジュールは競合シリアル化可能です。 競合するシリアル化可能なスケジュールはすべて、ビューもシリアル化可能です。

取引の状態

データベース内のトランザクションは、次のいずれかの状態になります-

トランザクション状態

  • アクティブ-この状態では、トランザクションが実行されています。 これは、すべてのトランザクションの初期状態です。
  • 部分的にコミット-トランザクションが最終操作を実行するとき、部分的にコミットされた状態にあると言われます。
  • Failed -データベース回復システムによって行われたチェックのいずれかが失敗した場合、トランザクションは失敗状態にあると言われます。 失敗したトランザクションはそれ以上続行できなくなります。
  • Aborted -チェックのいずれかが失敗し、トランザクションが失敗した状態に達した場合、Recovery Managerはデータベース上のすべての書き込み操作をロールバックして、データベースを実行前の元の状態に戻しますトランザクション。 この状態のトランザクションは中止と呼ばれます。 データベース回復モジュールは、トランザクションが中断した後、2つの操作のいずれかを選択できます-
  • トランザクションを再開します
  • トランザクションを強制終了します
  • Committed -トランザクションがすべての操作を正常に実行した場合、コミットされたと言われます。 その効果はすべて、データベースシステム上で永続的に確立されています。

DBMS-同時実行制御

複数のトランザクションを同時に実行できるマルチプログラミング環境では、トランザクションの同時実行性を制御することが非常に重要です。 並行トランザクションのアトミック性、分離、およびシリアライズ可能性を保証する同時実行制御プロトコルがあります。 同時実行制御プロトコルは、大きく2つのカテゴリに分類できます-

  • ロックベースのプロトコル
  • タイムスタンプベースのプロトコル

ロックベースのプロトコル

ロックベースのプロトコルを備えたデータベースシステムは、適切なロックを取得するまで、トランザクションがデータを読み書きできないメカニズムを使用します。 ロックは2種類あります-

  • バイナリロック-データアイテムのロックには2つの状態があります。ロックまたはロック解除されています。
  • 共有/排他-このタイプのロックメカニズムは、使用法に基づいてロックを区別します。 書き込み操作を実行するためにデータ項目でロックが取得された場合、それは排他ロックです。 複数のトランザクションが同じデータ項目に書き込むことを許可すると、データベースが一貫性のない状態になります。 データ値が変更されていないため、読み取りロックは共有されます。

利用可能なロックプロトコルの4つのタイプがあります-

単純なロックプロトコル

単純なロックベースのプロトコルにより、トランザクションは「書き込み」操作が実行される前にすべてのオブジェクトのロックを取得できます。 トランザクションは、「書き込み」操作の完了後にデータ項目のロックを解除する場合があります。

事前請求ロックプロトコル

事前請求プロトコルは、操作を評価し、ロックが必要なデータ項目のリストを作成します。 実行を開始する前に、トランザクションは必要なすべてのロックを事前にシステムに要求します。 すべてのロックが許可されている場合、トランザクションはすべての操作が終了したときに実行され、すべてのロックが解除されます。 すべてのロックが許可されていない場合、トランザクションはロールバックされ、すべてのロックが許可されるまで待機します。

事前請求

二相ロッキング2PL

このロックプロトコルは、トランザクションの実行フェーズを3つの部分に分割します。 最初の部分では、トランザクションの実行が開始されると、必要なロックの許可を求めます。 2番目の部分は、トランザクションがすべてのロックを取得する場所です。 トランザクションが最初のロックを解放するとすぐに、3番目のフェーズが開始されます。 このフェーズでは、トランザクションは新しいロックを要求できません。獲得したロックを解放するだけです。

二相ロック

2フェーズロックには2つのフェーズがあります。1つは*成長*で、すべてのロックがトランザクションによって取得されます。 2番目のフェーズは縮小されており、トランザクションによって保持されているロックが解放されます。

排他(書き込み)ロックを要求するには、トランザクションは最初に共有(読み取り)ロックを取得してから、排他ロックにアップグレードする必要があります。

厳密な二相ロック

Strict-2PLの最初のフェーズは2PLと同じです。 最初のフェーズですべてのロックを取得した後、トランザクションは引き続き正常に実行されます。 ただし、2PLとは対照的に、Strict-2PLは使用後にロックを解除しません。 Strict-2PLは、コミットポイントまですべてのロックを保持し、一度にすべてのロックを解放します。

厳密な二相ロック

Strict-2PLには、2PLのようにカスケードアボートがありません。

タイムスタンプベースのプロトコル

最も一般的に使用される同時実行プロトコルは、タイムスタンプベースのプロトコルです。 このプロトコルは、システム時刻または論理カウンターをタイムスタンプとして使用します。

ロックベースのプロトコルは、実行時にトランザクション間で競合するペア間の順序を管理しますが、タイムスタンプベースのプロトコルは、トランザクションが作成されるとすぐに動作を開始します。

すべてのトランザクションにはタイムスタンプが関連付けられており、順序はトランザクションの経過時間によって決まります。 0002時刻に作成されたトランザクションは、その後に来る他のすべてのトランザクションよりも古いものになります。 たとえば、0004でシステムに入るトランザクション「y」は2秒若いため、優先順位は古いものに与えられます。

さらに、すべてのデータ項目に最新の読み取りおよび書き込みタイムスタンプが付与されます。 これにより、システムはデータ項目に対して最後の「読み取りおよび書き込み」操作がいつ実行されたかを知ることができます。

タイムスタンプ順序付けプロトコル

タイムスタンプ順序付けプロトコルは、競合する読み取りおよび書き込み操作でトランザクション間のシリアル化を保証します。 これは、トランザクションのタイムスタンプ値に従って、競合するタスクのペアを実行するプロトコルシステムの責任です。

  • トランザクションT〜[.small]#i#〜のタイムスタンプは、TS(T〜[.small]#i#〜)として示されます。
  • データ項目Xの読み取りタイムスタンプは、R-timestamp(X)で示されます。
  • データ項目Xの書き込みタイムスタンプは、W-timestamp(X)で示されます。

タイムスタンプ順序付けプロトコルは次のように機能します-

トランザクションTiがread(X)操作を発行する場合-

  • TS(Ti)<W-timestamp(X)の場合
  • 操作が拒否されました。
  • TS(Ti)> = W-timestamp(X)の場合
  • 操作が実行されました。
  • すべてのデータ項目のタイムスタンプが更新されました。

トランザクションTiがwrite(X)操作を発行する場合-

TS(Ti)<R-timestamp(X)の場合

  • 操作が拒否されました。

TS(Ti)<W-timestamp(X)の場合

  • 操作は拒否され、Tiはロールバックされました。

それ以外の場合、操作が実行されました。

トーマスの書き込みルール

このルールは、TS(Ti)<W-timestamp(X)の場合、操作は拒否され、T〜[.small]#i#〜はロールバックされます。

タイムスタンプの順序付けルールを変更して、スケジュールビューをシリアル化できるようにすることができます。

T〜[.small]#i#〜をロールバックする代わりに、「書き込み」操作自体は無視されます。

DBMS-デッドロック

マルチプロセスシステムでは、デッドロックは共有リソース環境で発生する望ましくない状況であり、プロセスは別のプロセスによって保持されているリソースを無期限に待機します。

たとえば、一連のトランザクション\ {T〜[.small]#0#〜、T〜[.small]#1#〜、T〜[.small]#2#〜、…​、T〜[ .small]#n#〜}。 T〜[.small]#0#〜は、タスクを完了するためにリソースXを必要とします。 リソースXはT〜[.small]#1#〜によって保持され、T〜[.small]#1#〜はT〜[.small]#2#〜によって保持されるリソースYを待機しています。 T〜[.small]#2#〜はT〜[.small]#0#〜が保持するリソースZを待機しています。 したがって、すべてのプロセスは互いにリソースを解放するのを待ちます。 この状況では、どのプロセスもタスクを完了できません。 この状況は、デッドロックとして知られています。

デッドロックはシステムにとって健全ではありません。 システムがデッドロックでスタックしている場合、デッドロックに関係するトランザクションはロールバックされるか再起動されます。

デッドロック防止

システムのデッドロック状態を防ぐために、DBMSはトランザクションが実行されようとしているすべての操作を積極的に検査します。 DBMSは操作を検査し、デッドロック状態が発生する可能性があるかどうかを分析します。 デッドロック状態が発生する可能性があることが判明した場合、そのトランザクションの実行は許可されません。

デッドロック状況を事前に決定するために、トランザクションのタイムスタンプ順序付けメカニズムを使用するデッドロック防止スキームがあります。

ウェイトダイスキーム

このスキームでは、トランザクションが別のトランザクションによって競合するロックで既に保持されているリソース(データ項目)のロックを要求する場合、2つの可能性のいずれかが発生する可能性があります-

  • TS(T〜[.small]#i#〜)<TS(T〜[.small]#j#〜)-つまり、競合するロックを要求しているT〜[.small]#i#〜が古い場合T〜[.small]#j#〜-その後、T〜[.small]#i#〜は、データ項目が利用可能になるまで待機できます。
  • TS(T〜[.small]#i#〜)> TS(t〜[.small]#j#〜)-T〜[.small]#i#〜がT〜[.small]#よりも若い場合j#〜-その後T〜[.small]#i#〜が死にます。 T〜[.small]#i#〜は、ランダムな遅延で同じタイムスタンプで後で再起動されます。

このスキームにより、古いトランザクションは待機できますが、若いトランザクションは強制終了されます。

創傷待機スキーム

このスキームでは、トランザクションがリソース(データ項目)のロックを要求した場合、すでに別のトランザクションによって競合するロックが保持されているため、2つの可能性のいずれかが発生する可能性があります-

  • TS(T〜[.small]#i#〜)<TS(T〜[.small]#j#〜)の場合、T〜[.small]#i#〜はT〜[.small]#j#〜を強制的にロールバックされる-それはT〜[.small]#i#〜傷T〜[.small]#j#〜です。 T〜[.small]#j#〜は、ランダムな遅延で同じタイムスタンプで後で再起動されます。
  • TS(T〜[.small]#i#〜)> TS(T〜[.small]#j#〜)の場合、T〜[.small]#i#〜はリソースが利用可能になるまで待たされます。

このスキームでは、若いトランザクションが待機できます。しかし、古いトランザクションが新しいアイテムに保持されているアイテムを要求すると、古いトランザクションは新しいアイテムを強制的にアイテムを中止してリリースします。

どちらの場合も、後の段階でシステムに入るトランザクションは中止されます。

デッドロック回避

トランザクションの中止は、常に実際的なアプローチとは限りません。 代わりに、デッドロック回避メカニズムを使用して、デッドロック状況を事前に検出できます。 「グラフの待機」などのメソッドは使用可能ですが、トランザクションが軽量でリソースのインスタンスが少ないシステムにのみ適しています。 かさばるシステムでは、デッドロック防止技術がうまく機能する場合があります。

グラフを待つ

これは、デッドロック状態が発生する可能性があるかどうかを追跡するために利用できる簡単な方法です。 システムに入る各トランザクションに対して、ノードが作成されます。 トランザクションT〜[.small]#i#〜が、他のトランザクションT〜[.small]#j#〜によって保持されているXなどのアイテムのロックを要求すると、T〜[から有向エッジが作成されます.small]#i#〜からT〜[.small]#j#〜へ。 T〜[.small]#j#〜がアイテムXを解放すると、それらの間のエッジはドロップされ、T〜[.small]#i#〜はデータアイテムをロックします。

システムは、他のユーザーが保持している一部のデータ項目を待機しているすべてのトランザクションについて、この待機グラフを維持します。 システムは、グラフにサイクルがあるかどうかをチェックし続けます。

Wait-for Graph

ここでは、次の2つのアプローチのいずれかを使用できます-

  • まず、別のトランザクションによってすでにロックされているアイテムのリクエストを許可しないでください。 これは常に実行可能であるとは限らず、トランザクションがデータ項目を無期限に待機し、それを取得できない飢starを引き起こす可能性があります。
  • 2番目のオプションは、トランザクションの1つをロールバックすることです。 古いトランザクションよりも重要な場合があるため、若いトランザクションをロールバックすることは必ずしも実行可能ではありません。 相対アルゴリズムの助けを借りて、トランザクションが選択され、中止されます。 このトランザクションは victim と呼ばれ、プロセスは victim selection と呼ばれます。

DBMS-データバックアップ

揮発性ストレージの損失

RAMなどの揮発性ストレージには、すべてのアクティブログ、ディスクバッファー、および関連データが格納されます。 さらに、現在実行されているすべてのトランザクションを保存します。 このような揮発性ストレージが突然クラッシュするとどうなりますか? データベースのすべてのログとアクティブコピーが明らかに削除されます。 データを回復するために必要なものはすべて失われるため、回復はほとんど不可能になります。

揮発性ストレージの損失の場合、次の手法を採用できます-

  • データベースの内容を定期的に保存するために、複数の段階で*チェックポイント*を持つことができます。
  • 揮発性メモリ内のアクティブなデータベースの状態は、安定したストレージに定期的に*ダンプ*できます。これには、ログ、アクティブなトランザクション、およびバッファブロックが含まれることもあります。
  • <dump>は、データベースの内容が不揮発性メモリから安定したメモリにダンプされるたびに、ログファイルでマークできます。

回復

  • システムが障害から回復すると、最新のダンプを復元できます。
  • REDOリストとUNDOリストをチェックポイントとして維持できます。
  • 元に戻す/やり直しリストを参照して、最後のチェックポイントまでのすべてのトランザクションの状態を復元することにより、システムを回復できます。

致命的な障害からのデータベースのバックアップとリカバリ

壊滅的な障害は、安定したセカンダリストレージデバイスが破損する障害です。 ストレージデバイスを使用すると、内部に保存されているすべての貴重なデータが失われます。 このような壊滅的な障害からデータを回復するには、2つの異なる戦略があります-

  • リモートバックアップ&minu;ここでは、データベースのバックアップコピーが、災害の場合に復元できる場所から離れた場所に保存されます。
  • または、データベースのバックアップを磁気テープに保存して、より安全な場所に保存することもできます。 このバックアップは、新しくインストールしたデータベースに後で転送して、バックアップのポイントに戻すことができます。

成長したデータベースは大きすぎるため、頻繁にバックアップできません。 そのような場合、ログを見るだけでデータベースを復元できるテクニックがあります。 したがって、ここで行う必要があるのは、頻繁な間隔ですべてのログのバックアップを取ることです。 データベースは1週間に1回バックアップでき、非常に小さいログは毎日または可能な限り頻繁にバックアップできます。

リモートバックアップ

リモートバックアップは、データベースが配置されているプラ​​イマリロケーションが破壊された場合に安心感を提供します。 リモートバックアップは、オフラインでもリアルタイムでもオンラインでもかまいません。 オフラインの場合、手動で保守されます。

リモートデータバックアップ

オンラインバックアップシステムは、データベース管理者や投資家にとってよりリアルタイムでライフセーバーです。 オンラインバックアップシステムは、リアルタイムデータのすべてのビットを2つの離れた場所で同時にバックアップするメカニズムです。 1つはシステムに直接接続され、もう1つはバックアップとしてリモートの場所に保持されます。

プライマリデータベースストレージに障害が発生するとすぐに、バックアップシステムが障害を検知し、ユーザーシステムをリモートストレージに切り替えます。 時々、これは非常に迅速であるため、ユーザーは失敗に気付くことさえできません。

DBMS-データ復旧

クラッシュ回復

DBMSは、毎秒数百のトランザクションが実行される非常に複雑なシステムです。 DBMSの耐久性と堅牢性は、その複雑なアーキテクチャとその基盤となるハードウェアとシステムソフトウェアに依存します。 トランザクションの最中に失敗またはクラッシュした場合、システムは何らかのアルゴリズムまたは手法に従って損失データを回復することが期待されます。

故障分類

問題が発生した場所を確認するには、次のように、障害をさまざまなカテゴリに一般化します-

トランザクションの失敗

トランザクションは、実行に失敗した場合、またはそれ以上進むことができないポイントに達した場合に中止する必要があります。 これはトランザクション障害と呼ばれ、少数のトランザクションまたはプロセスのみが損傷を受けます。

トランザクションの失敗の理由は次のとおりです-

  • 論理エラー-トランザクションにコードエラーまたは内部エラー条件があるためにトランザクションを完了できない場合。
  • システムエラー-DBMSが実行できないためにデータベースシステム自体がアクティブなトランザクションを終了する場合、または何らかのシステム条件のために停止する必要がある場合。 たとえば、デッドロックまたはリソースが利用できない場合、システムはアクティブなトランザクションを中止します。

システムクラッシュ

システムの外部に問題があり、システムが突然停止し、システムがクラッシュする可能性があります。 たとえば、電源の中断により、基礎となるハードウェアまたはソフトウェアの障害が発生する場合があります。

例には、オペレーティングシステムエラーが含まれる場合があります。

ディスク障害

テクノロジーの進化の初期には、ハードディスクドライブまたはストレージドライブが頻繁に故障するという一般的な問題でした。

ディスク障害には、不良セクタの形成、ディスクへの到達不能、ディスクヘッドクラッシュ、またはディスクストレージのすべてまたは一部を破壊するその他の障害が含まれます。

ストレージ構造

ストレージシステムについてはすでに説明しました。 簡単に言えば、ストレージ構造は2つのカテゴリに分けることができます-

  • 揮発性ストレージ-名前が示すように、揮発性ストレージはシステムクラッシュに耐えることができません。 揮発性ストレージデバイスは、CPUの非常に近くに配置されます。通常、それらはチップセット自体に埋め込まれます。 たとえば、メインメモリとキャッシュメモリは揮発性ストレージの例です。 高速ですが、保存できる情報はごくわずかです。
  • 不揮発性ストレージ-これらのメモリは、システムのクラッシュに耐えるように作られています。 データストレージ容量は非常に大きくなりますが、アクセス性は遅くなります。 例としては、ハードディスク、磁気テープ、フラッシュメモリ、不揮発性(バッテリーバックアップ)RAMがあります。

回復と原子性

システムがクラッシュすると、いくつかのトランザクションが実行され、データ項目を変更するためにさまざまなファイルが開かれる場合があります。 トランザクションは、本質的にアトミックなさまざまな操作で構成されています。 ただし、DBMSのACIDプロパティによれば、トランザクション全体の原子性を維持する必要があります。つまり、すべての操作が実行されるか、まったく実行されないかのいずれかです。

DBMSがクラッシュから回復するとき、それは以下を維持する必要があります-

  • 実行されていたすべてのトランザクションの状態を確認する必要があります。
  • トランザクションが何らかの操作の途中にある可能性があります。この場合、DBMSはトランザクションのアトミック性を保証する必要があります。
  • トランザクションを今すぐ完了できるか、ロールバックする必要があるかを確認する必要があります。
  • DBMSを一貫性のない状態のままにするトランザクションは許可されません。

DBMSがトランザクションの原子性を回復するだけでなく維持するのに役立つ2つのタイプのテクニックがあります-

  • 実際にデータベースを変更する前に、各トランザクションのログを維持し、安定したストレージに書き込みます。
  • 変更が揮発性メモリで行われ、実際のデータベースが更新されるシャドウページングを維持します。

ログベースの回復

ログは、トランザクションによって実行されたアクションの記録を保持する一連の記録です。 ログは実際の変更の前に書き込まれ、安定したストレージメディアに保存されることが重要です。これはフェールセーフです。

ログベースのリカバリは次のように機能します-

  • ログファイルは安定したストレージメディアに保存されます。
  • トランザクションがシステムに入り、実行を開始すると、トランザクションに関するログが書き込まれます。
<Tn, Start>
  • トランザクションがアイテムXを変更すると、次のようにログが書き込まれます-
<Tn, X, V1, V2>

T〜[.small]#n#〜がXの値をV〜[.small]#1#〜からV〜[.small]#2#〜に変更したことを読み取ります。

  • トランザクションが終了すると、ログに記録されます-
<Tn, commit>

データベースは2つのアプローチを使用して変更することができます-

  • データベースの遅延変更-すべてのログは安定したストレージに書き込まれ、トランザクションがコミットされるとデータベースが更新されます。
  • 即時データベース変更-各ログは実際のデータベース変更に続きます。 つまり、データベースはすべての操作の直後に変更されます。

並行トランザクションによる回復

複数のトランザクションが並行して実行されている場合、ログはインターリーブされます。 復旧時には、復旧システムがすべてのログをバックトラックしてから復旧を開始するのが難しくなります。 この状況を緩和するために、最新のDBMSのほとんどは「チェックポイント」の概念を使用しています。

チェックポイント

ログをリアルタイムおよび実際の環境で保持および維持すると、システムで使用可能なすべてのメモリ領域がいっぱいになる可能性があります。 時間が経過すると、ログファイルが大きくなりすぎて処理できなくなる場合があります。 チェックポイントは、以前のすべてのログがシステムから削除され、ストレージディスクに永続的に保存されるメカニズムです。 チェックポイントは、DBMSが一貫した状態になり、すべてのトランザクションがコミットされる前のポイントを宣言します。

回復

同時トランザクションを備えたシステムがクラッシュして回復すると、次のように動作します-

回復

  • 回復システムは、ログを最後から最後のチェックポイントまで逆読みします。
  • 取り消しリストとやり直しリストの2つのリストを保持します。
  • 復旧システムが<T〜[.small]#n#〜、Start>および<T〜[.small]#n#〜、Commit>または単に<T〜[.small]#n#〜のログを検出した場合、Commit>、トランザクションをredo-listに入れます。
  • 復旧システムが<T〜[.small]#n#〜、Start>のログを見つけたが、コミットまたはアボートログが見つからない場合、トランザクションを元に戻すリストに入れます。

元に戻すリスト内のすべてのトランザクションが取り消され、ログが削除されます。 REDOリスト内のすべてのトランザクションとそれらの以前のログは削除され、ログを保存する前にやり直されます。