リレーショナルデータベース
リレーショナルモデルとは2次元のテーブルモデルのことで、リレーショナルデータベースは2次元のテーブルとテーブル間のリンクで構成されるデータ組織です。
- 利点
- 理解しやすい: 2次元のテーブル構造は論理世界に非常に近い概念であり、リレーショナルモデルはメッシュや階層構造などの他のモデルよりも理解しやすい;
- 使いやすい: 一般的なSQL言語により、リレーショナルデータベースの操作は非常に簡単です;
- 保守が容易: 豊富な整合性により、データの冗長性や不整合が発生する確率を大幅に削減。
- デメリット
- 高同時性シナリオではIOが大きなボトルネック;
- 大量のデータ、低い読み取り効率と書き込み効率;
トリプルパラダイム
第一パラダイム
列が不可分であることに重点を置いています。例えば、生徒数の表です:
用紙 3つ 23 プラム 4 24 名前は割り切れないので、最初のパラダイムに違反します。 第2のパラダイム そもそも第1のパラダイムを満たすためには、さらに2つの条件が必要:
- テーブルには主キーが必要です;
- 主キーでないカラムは、主キーに完全に依存していなければなりません。
N01 | 張三 | C01 | 81 |
N01 | 張三 | C02 | 82 |
N02 | 李斯 | C02 | 92 |
このテーブルの主キー = 学生番号 + コース番号と仮定すると、単位は主キーに完全に依存していますが、名前は主キーに完全には依存しておらず、名前は学生番号に依存しています。 |
第3のパラダイム 移籍に依存しない第2のパラダイムの強化
N01 張三 100 ファーストクラス N02 リス 200 カードシフト クラス名がクラス番号に依存していることから、移籍の依存関係があることが示唆されます。
第二のパラダイムは第三のパラダイムと混同されやすいのですが、第三のパラダイムは非主要キーが主キーに完全に依存しなければならないことを強調し、完全な依存とは主キーの属性の一部に依存することができないことを意味します。第三のパラダイムは第二のパラダイムが満たされていることを強調し、すれ違いの依存はありえないことを意味します。
SQL
構造化クエリー言語(Structured Query Language)、略してSQL(エスキューエル)は、特殊目的のプログラミング言語であり、データへのアクセス、リレーショナル・データベース・システムの照会、更新、管理のためのデータベース照会およびプログラミング言語です。SQL言語の構造は、以下の6つの主要部分から構成されています:
- データ定義言語:テーブルの作成、変更、削除、テーブルへのインデックスの追加など;
- データ操作言語:テーブルデータの追加、変更、削除;
- データクエリ言語:テーブルからデータを取得するために使用され、予約語SELECTはDQLで最も使用される動詞です。DQLの他の一般的な予約語は、WHERE、ORDER BY、GROUP BY、およびHAVINGです。
- Transaction Control Language (トランザクション制御言語): DML ステートメントによって影響を受けるテーブルのすべての行がタイムリーに更新されるようにするステートメント。COMMITコマンド、SAVEPOINTコマンド、ROLLBACKコマンドを含みます。
- データ制御言語:そのステートメントは、GRANTまたはREVOKEを通じて特権制御を実装し、個々のユーザーおよびユーザーグループのデータベースオブジェクトへのアクセスを決定します。
- ポインタ制御言語: DECLARE CURSOR、FETCH INTO、UPDATE WHERE CURRENTなどの文は、1つ以上のテーブルの個々の行に対する操作に使用されます。
事
概念
データベース・トランザクションは、さまざまなデータ項目にアクセスし、潜在的に操作するデータベース操作のシーケンスで、そのすべてが実行されるか、または実行されないかのどちらかであり、不可分の作業単位です。トランザクションは、トランザクションの開始から終了までの間に実行されたすべてのデータベース操作で構成されます。
敗者のMingがChina Merchants Bankの口座に100ドル、CCBの口座に0ドルを持っていて、China Merchants BankからCCBの口座に80ドル送金したい場合です。
- リクルートバンクは100 - 80 = 20のロジックを実行します;
- CCBは0+80=80ロジックを実行します。
これら2つのロジックのうちの1つが失敗した場合、それらはすべて取り下げられなけれ ばなりません。このように、2つのロジックを合わせて1つのトランザクションとなります。
トランザクションの4つの主な特徴 ACID
- 原子性:トランザクションは、その全体がコミットされるか、またはその全体がロールバックされる不可分の単位です;
- 一貫性:取引完了後、すべてのデータの状態が一貫していること。 上記の送金シナリオから、どのように送金しても、暁明の中国招商銀行+中国建設銀行の合計残高は100になります;
- 分離:分離レベルによって最終的に決定される、それぞれが互いに干渉できない複数のトランザクションの同時実行。
- 永続性: トランザクションがコミットされると、データへの変更は永続的に、つまりディスクに永続化されます。
トランザクションの同時実行の問題
ダーティリード:あるトランザクションがデータにアクセスし、そのデータに変更を加えたが、その変更がまだデータベースにコミットされておらず、別のトランザクションもこのデータにアクセスし、それを使用する場合。
- Mingは他の操作を先に行い、同時に父親がBalance=20を変更しましたが、父親はトランザクションをコミットしませんでした;
- Xiao Mingは次にBalance=20をチェックし、次に他の操作を行い、最後にトランザクションをコミットしました。
もし父親のトランザクションは、この時点でロールバック、それは父親のこの操作が無効であることを意味し、Xiaomingは無効な値を取得し、Xiaomingは、他の操作を行うには、この無効な値を取得した場合、それは深刻なデータの問題を引き起こす可能性があります。
非再現読み取り:トランザクション内で同じデータが何度も読み取られることを意味し、読み取り期間中に他のトランザクションの1つがデータを変更してコミットすると、トランザクションAがトランザクションBによって変更されたデータを読み取ることになり、その結果、何度も読み取られたデータに矛盾が生じます。上図に示すように、シャオミンとシャオミンの父親は同じアカウントで操作します。
- 明はまず残高=001をチェックし、同時に父親が残高=20を修正し、父親はトランザクションをコミットします;
- その後、小明は他の操作をして、再び残高=20を確認し、2つのクエリで残高が同じでないことを発見しました。
明が他の操作でバランス=100を使用し、他の操作で特定の計算を行った後、20のバランスについて質問した場合、他の前の操作はすべて無駄に行われたに等しい。
- ファントム・リード:いわゆるファントム・リードとは、あるトランザクションがある範囲のレコードを読み込んだ後、別のトランザクションがその範囲に新しいレコードを挿入し、トランザクションAがその範囲のレコードを再度読み込んだ場合に発生する幻の行のことです。
上の図に示すように、特定のクラスの生徒のテーブルです。
- トランザクションAは、まず身長= 081仮定= 3の数を見て、同時にトランザクションBは身長= 183小東の学生を追加し、トランザクションBは、トランザクションをコミットします;
- トランザクションAは、他の操作を行い、身長= 081 = 4の数を確認し、2つのクエリの行の数が同じではないことがわかりました。
統計の始めに身長180の生徒数=3と仮定して、他の操作で生徒数を記録し、身長180の生徒数を照会ると4となり、これは他の前の操作が無駄に行われたに等しい。
トランザクション分離レベル
Read Uncommitted: Read Uncommittedはトランザクションが他のトランザクションの変更されコミットされていないデータを読み取るもので、最も低い分離レベルです;
コミットされた読み取り:コミットされた読み取りでは、トランザクションは他のトランザクションによって変更されコミットされたデータを読み取ります;
Repeatable Read(反復可能な読み取り):他のトランザクションによってコミットされた特定のデータを複数回読み取ること;
データベースの整合性制約
データの整合性とは、データの正しさと一貫性のことで、テーブルを定義する際に整合性制約を定義することで実現できます。
NOT NULL | 指定されたカラムは NULL 値を格納できません。 |
UNIQUE | 指定された列の各行は一意な値でなければなりません。 |
PRIMARY KEY | カラムを主キーに指定 |
FOREIGN KEY | 外部キーとしてカラムを指定 |
CHECK | 指定されたカラムの値がチェック条件に一致する必要があります。 |
DEFAULT | デフォルト値を設定する列の指定 |
次へ