AWSエンジニアがAzureをゼロから学習する（データベース編）

普段の業務ではAWSをメインに使っていますが、最近Azureを勉強し始めました。データベースに関する[学習ガイド](https://learn.microsoft.com/ja-jp/credentials/certifications/resources/study-guides/dp-900)の項目が非常によく整理されていたと感じ、関連知識点をまとめてみました。


# データの主要概念を説明する
この部分の知識はAzureだけでなく、他のクラウドサービスやローカルデータベースの運用にとって不可欠なものだと考えています。


## データを表す方法について
データは主に以下の三つの方法で分類されます：

構造化データ
半構造化データ
非構造化データ

それぞれのデータの種類について簡単に説明します。

### 構造化データ

構造化データは、Excelやスプレッドシートなどの形式で整理され、データ要素が明確に定義され、固定のデータフィールドに格納されているデータのことを指します。これらのデータは通常、表、行、列、フィールドなどの規則的な構造を持っており、データベース管理システム（DBMS）で管理しやすい形式で格納されています。


例として、顧客情報、在庫データ、取引記録などが挙げられます。

![構造化データ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457891/bd930d88-555b-2b42-4138-338c25efaf64.png)

データベース内の特定のテーブルやフィールドに格納され、各要素は特定のデータ型（例：数値、文字列、日付など）を持ちます。

### 非構造化データ

非構造化データは、明確な構造がないデータ形式です（テキスト、画像、音声、動画等）。
非構造化データは自然言語処理、画像認識、音声認識などのテクノロジーを使用して分析できます。

Windows file folder、ウェブページのテキスト、写真、動画コンテンツ、音声録音等は非構造化データに該当します。


### 半構造化データ

半構造化データは、構造化データと非構造化データの中間に位置するデータ形式です。データはフィールドや列で構成されていますが、各要素の形式が異なることがあります。

半構造化データは、柔軟性が高く、異なるデータ型や属性を含むことができます。これにより、複雑なデータ構造を表現できます。
たとえば、HTML、 XML、JSON等はこちらの分類に入ります。


## よくあるデータのワークロード

以下は3つのリレーショナルデータベースのワークロードです。
▪ トランザクションワークロード（OLTP）
▪ 分析ワークロード（OLAP）
▪ データウェアハウス

### トランザクションワークロード（OLTP: Online Transaction Processing）:

トランザクションワークロードは、データベース内の短期間で処理される大量のトランザクション（データの追加、更新、削除）をサポートするために設計されています。主に日常の業務処理に使用され、データの一貫性と正確性を重視します。

応用例: 銀行のATM取引、オンライン注文処理、在庫管理等。

#### Azure OLTPの例
- Azure SQL Database
- SQL Server in a VM
- Azure Database for MySQL
- Azure Database for PostgreSQL

### 分析ワークロード（OLAP: Online Analytical Processing）:

分析ワークロードは、データベース内の大量のデータをクエリし、洞察を得るために使用されます。
データの集計、統計情報、トレンドの分析、ビジネスインテリジェンスに適しています。レポート作成やダッシュボードの生成にも使用されます。

応用例: 売上分析、市場セグメンテーション、顧客傾向の理解等。

#### Azure OLAPの例
- SQL Server with Columnstore indexes
- Azure Analysis Services
- SQL Server Analysis Services

### データウェアハウス

データウェアハウスは、組織内の異なるデータソースからデータを収集、統合し、歴史データを格納する専用のデータベースです。分析ワークロード向けに最適化されており、大量のデータを高速にクエリし、高度な分析を可能にします。時系列データ、トレンド分析、ビジネスインテリジェンスに使用されます。
応用例: 企業全体の財務データの統合と分析、長期の業績評価等。

#### Azureデータウェアハウスの例
- Azure Synapse Analytics

# Azure 上のリレーショナル データベース
リレーショナルデータベース（RDS:Relational Database）は、データを表形式で管理し、データ間の関係（リレーション）を利用して情報を格納および操作するためのデータベース管理システム（DBMS）の一種です。リレーショナルデータベースは、データをテーブルとして構造化し、行と列で表現される二次元的なデータ構造を使用します。

▪️データベースのスキーマ：
テーブルとそれに関連するエンティティ（実体）を定義します。データベース内でどのようにデータが組織され、データがどのように関連付けられるかを定義する構造的な設計です。

▪️テーブルとエンティティ
テーブルはデータの実際の格納場所であり、エンティティはテーブル内の特定のデータの種類を表します。たとえば、"顧客"というエンティティは、"顧客テーブル"に対応することがあります。

▪️カラムと属性:
テーブル内の各エンティティは、カラムまたは属性で定義されます。カラムはエンティティの特定の情報または特性を表し、データの型（文字列、数値、日付など）を指定します。
例えば、"顧客テーブル"のカラムには "顧客名"、"住所"、"電話番号"、"メールアドレス"等

▪️キー:
データベーススキーマはテーブル間の関連性を定義します。これは、テーブルのキー（主キーと外部キー）を使用しています。
主キーはテーブル内の一意のエンティティを識別し、外部キーは他のテーブルとの関連を示します。これにより、データベース内のデータ間の結びつきが確立されます。

## リレーショナルの正規化

リレーショナルデータベースの正規形は、データベース内のデータを整理し、冗長性を減少させ、データの一貫性と整合性を確保するための規則のセットです。正規形には第1正規形（1NF）、第2正規形（2NF）、第3正規形（3NF）などがあります。以下にそれぞれの正規形を説明します：

### 第1正規形(1NF)

第1正規形は、テーブル内の各列が個別の値を持ち、重複のないデータが格納されていることを要求します。
テーブル内の各カラムは、単一のデータ型（数値、文字列、日付など）を持つ必要があります。
また、各行（レコード）は一意の識別子（主キー）によって区別される必要があります。

### 第2正規形（2NF）:

第2正規形は、第1正規形を満たすうえで、追加の条件を加えます。それは、非キー属性（主キー以外の属性）が主キーに完全に関連する必要があることです。
つまり、テーブル内の各非キー属性は、主キー全体に関連し、部分的にではなく、主キーの値全体に依存する必要があります。

### 第3正規形（3NF）:

第3正規形は、第2正規形を満たすうえで、さらに追加の条件を付け加えます。それは、非キー属性同士が互いに関連しないようにすることです。
つまり、テーブル内の各非キー属性は、他の非キー属性に依存していてはならず、トランジティブな関数従属（過度な関連性）が存在してはなりません。


## 一般的な構造化クエリ言語 (SQL) ステートメント
### SQL
SQL（Structured Query Language）は、データベース管理システム（RDBMS）内でデータの操作、クエリ、管理を行うための標準化されたプログラミング言語です。SQLはリレーショナルデータベース内のデータの格納、取得、更新、削除、操作に広く使用され、データベース関連のタスクを実行するための強力なツールです。

### DDL（Data Definition Language）:

DDLはデータベースの構造とスキーマを定義および変更するためのSQLコマンドのカテゴリです。
DDLコマンドには以下のようなものが含まれます：

▪️CREATE: 新しいデータベース、テーブル、ビュー、インデックスなどのオブジェクトを作成します。
▪️ALTER: データベースオブジェクトの構造を変更します（例：テーブルのカラムの追加、変更、削除）。
▪️DROP: データベースオブジェクトを削除します。
▪️TRUNCATE: テーブル内のデータを削除します。
▪️COMMENT: テーブルやカラムにコメントを追加します。

### DML（Data Manipulation Language）:

DMLはデータベース内のデータの操作、挿入、更新、削除、およびデータのクエリに使用されるSQLコマンドのカテゴリです。
DMLコマンドには以下のようなものが含まれます：

▪️SELECT: データの取得とクエリを実行します。
▪️INSERT: データをテーブルに挿入します。
▪️UPDATE: データを変更または更新します。
▪️DELETE: データをテーブルから削除します。

### DCL（Data Control Language）:

DCLはデータベースへのアクセス権、セキュリティ、およびデータの整合性を管理するためのSQLコマンドのカテゴリです。
DCLコマンドには以下のようなものが含まれます：

▪️GRANT: 特定のデータベースオブジェクトに対する特定の権限をユーザーやロールに付与します。
▪️REVOKE: データベースオブジェクトから特定の権限を取り消します。
▪️COMMIT: トランザクション内の変更を確定し、データベースに反映します。
▪️ROLLBACK: トランザクション内の変更を取り消し、データベースを以前の状態に戻します。

## Azure のリレーショナル Data Services
### Azure SQL 製品ファミリ

▪️Azure Virtual Machines 上の SQL Server 
▪️Azure SQL Managed Instance
▪️Azure SQL Database

#### Azure Virtual Machines 上の SQL Server
Azure仮想マシン（VM）上にSQL Serverをデプロイするものです。これはSQL Serverの伝統的なオンプレミス展開に似ており、SQL Serverの完全な制御を提供します。
お客様はSQL Serverエンタープライズエディション、標準エディション、Webエディションなどを選択でき、自分でSQL Serverの設定と管理を行う必要があります。
カスタムアプリケーションのホスティング、既存のSQL Serverワークロードの移行、高度なカスタマイズに適しています。

Azure ポータルで検索すると、たくさんの選択が出てきます。
※SQL Server Option: 2008, 2012, 2014, 2017, 2019, 2022

![SQL Server Option](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457891/03d8e1e9-cfc2-c506-9a7f-15b8ee3e2848.png)



#### Azure SQL Managed Instance
Azure SQL Managed Instanceは、SQL Serverの完全なエンタープライズ機能と互換性を持つ完全にマネージドされたデータベースプラットフォームです。既存のアプリケーションとワークロードをAzureに移行し、SQL Serverとの適切な互換性を保ちつつ、クラウドのメリットを享受できます。データベースの設定やパフォーマンスに関する多くの管理タスクは自動化されており、アプリケーションの移行を容易にします。

![Azure SQL Managed Instance](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457891/89c80987-d96d-cf57-80ca-4d9b6d3596eb.png)


#### Azure SQL Database
Azure SQL Databaseは、完全にマネージドされたクラウドデータベースプラットフォームで、リレーショナルデータベースをホストするために設計されています。ユーザーはデータベースの作成、スケーリング、バックアップ、セキュリティなどをAzureに任せることができ、データベースのパフォーマンスと可用性について心配する必要はありません。サーバーレスSQLプール、ハイブリッドトランザクションレプリケーション、Elastic Database Poolなど、多くの機能が提供されています。

![Azure SQL Database](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457891/fbf93f8b-fe6d-060d-369a-4020cdfdb5b2.png)

### オープンソース データベース システム用の Azure データベース サービス

Azureは多くのオープンソースデータベースプラットフォームをホスティングおよびサポートしており、これらのデータベースをAzure上で実行できます。以下はいくつかの主要なAzureでサポートされているオープンソースデータベースの例です。

#### Azure Database for PostgreSQL:

PostgreSQLは高度に拡張可能なオープンソースのリレーショナルデータベース管理システム（RDBMS）です。Azure Database for PostgreSQLは、PostgreSQLデータベースをAzureでホストし、自動バックアップ、スケーリング、セキュリティを提供します。

例として、
Document Data
Column family data
Key-value Data
Graph Data

#### Azure Database for MySQL:

MySQLは人気のあるオープンソースのRDBMSで、Webアプリケーションやアプリケーション開発で広く使用されています。Azure Database for MySQLはMySQLデータベースをAzureでホストし、高可用性とセキュリティを提供します。

#### Azure Database for MariaDB
MariaDBはMySQLから派生したオープンソースのRDBMSで、高性能で安定性があります。Azure Database for MariaDBはMariaDBデータベースをAzureで実行し、スケーリング、セキュリティ、バックアップを提供します。

※SQL Server uses T-SQL, Oracle uses PL/SQL, MYSQL uses SQL/PML, PostgreSQL users PL/pgSQL

## Azure 上の非リレーショナル データ
非リレーショナルデータベース、またはNoSQLデータベースは、伝統的なリレーショナルデータベース（RDBMS）に対抗するデータモデルおよびアーキテクチャを提供するデータベースタイプです。これらのデータベースは、大容量データの保存、高速データの読み書き、柔軟なデータモデリングなどの異なる要件に対応します。

### Azure Storage の機能について
Azure Storageは、Microsoft Azureクラウドプラットフォーム上でデータを格納、管理、保護するための統合ストレージソリューションです。Azure Storageにはさまざまなストレージサービスが提供されており、それぞれ異なるデータの格納およびアクセス要件をサポートします。以下に、主要なAzure Storageサービスについて説明します：

#### Azure Blob Storage:

Azure Blob Storageは、大容量の非構造化データを保存および管理するためのストレージサービスです。Blob（Binary Large Object）は、画像、ビデオ、ドキュメント、バックアップ、アーカイブなどのデータを格納できます。ファイルの保存、アクセス制御、バックアップ、バージョン管理、CDN（Content Delivery Network）との統合などが可能です。

#### Azure File Storage:

Azure File Storageは、クラウドベースの共有ファイルストレージサービスです。これにより、Azureベーブル仮想マシンおよびクラウドサービスとの間でファイルを共有できます。
グループでのファイルアクセス、サーバーメッセージブロック（SMB）プロトコルの使用、フォルダとファイルのアクセス制御が可能です。

#### Azure Table Storage:
Azure Table Storageは、スケーラブルで高速なNoSQLデータベースサービスです。大量のデータを格納し、クエリでき、高可用性を提供します。データのカラムファミリー、キーによるアクセス、スケーラビリティ、複数のデータセンターでのデータレプリケーションがサポートされています。


### Azure Cosmos DB の機能
Azure Cosmos DBは、Microsoft Azureのマルチモデル分散データベースサービスで、グローバルな規模でデータを格納、クエリ、およびスケーリングするために設計されています。Azure Cosmos DBは、多くの異なるデータモデル（API、ドキュメント、キー値、列指向、グラフ）をサポートし、高い可用性、低遅延、セキュリティ、スケーラビリティを提供します。
![Azure Cosmos DB](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457891/4d62b0e5-f3ab-0a48-b117-7091c9bf3114.png)


## ノーリレーショナル データのデータタイプ

### Document Data
#### Document Data：
Key-value型、Json、XML等の半構造化データ格納します。

#### Column family data: 
データを列ごとに格納します。データは列ファミリーと呼ばれる論理的なグループにまとめられます。

#### Key value Data:
Key-Valueデータベースは、単純なキー（Key）とその対応する値（Value）のペアでデータを格納します。各キーは一意であり、それに対応する値はデータの本体となります。

#### Graph data:
Graphデータベースでは、データはノード（Node）とエッジ（Edge）の2つの基本要素から構成されます。ノードは実体を表し、エッジはノード間の関係を示します。


## 大規模な分析の一般的な要素について説明する

### Azure Data Warehousing

データウェアハウスは、組織内の異なるデータソースからデータを収集、統合し、歴史データを格納する専用のデータベースです。分析ワークロード向けに最適化されており、大量のデータを高速にクエリし、高度な分析を可能にします。時系列データ、トレンド分析、ビジネスインテリジェンスに使用されます。
例:企業全体の財務データの統合と分析、長期の業績評価等。

#### 対称型マルチプロセッシング(SMP: Symmetric Multi-Processing)
- Azure SQL Bdatabase
- SQL Server in a VM

#### 大規模並列処理（MPP：Massively Parallel Processing）
- Azure Synapse Analytics(SQL DW)
- Apache Hive on HDlnsight
- Interactive Query(Hive LLAP) on Hdlnsight