データベースとは
この講座では、データベースについて学びます。
- データベースとは何か、なぜ必要なのか
- データベースの種類と特徴
- リレーショナルデータベースの基本概念(テーブル、行、列)
- 主キーと外部キーによるテーブル間の関連付け
- SQLの概要と基本的な操作(SELECT、INSERT、UPDATE、DELETE)
- 代表的なリレーショナルデータベース管理システム(MySQL、PostgreSQL)
1. なぜデータベースが必要なのか
アプリケーションを開発する際、ユーザ情報や商品情報、注文履歴など、さまざまなデータを扱う必要があります。これらのデータをファイルに保存して管理することも可能ですが、データ量が増えてくると、特定の条件に合うデータを効率的に検索したり、複数のユーザが同時にデータを読み書きしたりすることが困難になります。
データベース(Database、DB)は、大量のデータを効率的に保存・管理・検索するための仕組みです。データベースを利用することで、以下のようなことが可能になります。
大量のデータの中から必要な情報を高速に検索できます。たとえば、数百万件の商品データから特定の条件に合う商品だけを瞬時に取り出すことができます。
複数のユーザやアプリケーションが同時にデータにアクセスしても、データの整合性が保たれます。たとえば、同じ商品に対して複数の注文が同時に発生しても、在庫数が正しく管理されます。
障害が発生した場合でもデータを失わないよう、バックアップや復旧の仕組みが備わっています。
2. データベースの種類
データベースにはいくつかの種類がありますが、ここでは代表的なものを紹介します。
2.1 リレーショナルデータベース
リレーショナルデータベース(Relational Database、RDB)は、データをテーブル(表)の形式で管理するデータベースです。Excelのスプレッドシートのように行と列でデータを整理し、テーブル同士を関連付けて(リレーション)データを管理します。SQL(Structured Query Language)という専用の言語を使ってデータの操作を行います。現在のWebアプリケーション開発で最も広く使われているデータベースの種類です。
2.2 NoSQLデータベース
NoSQL(Not Only SQL)データベースは、リレーショナルデータベースとは異なる方法でデータを管理するデータベースの総称です。JSON形式でデータを保存するドキュメント型(MongoDB)、キーと値のペアでデータを管理するキーバリュー型(Redis)、大量のデータを分散して管理するワイドカラム型(Cassandra)などがあります。大量のデータを高速に処理する必要がある場合や、データの構造が頻繁に変わる場合に適しています。
| 💡 ポイント |
|---|
| 実際の開発現場では、リレーショナルデータベースとNoSQLデータベースを組み合わせて使うケースも多くあります。たとえば、ユーザ情報や注文データのように整合性が重要なデータはリレーショナルデータベースで管理し、セッション情報やキャッシュのように高速なアクセスが求められるデータはRedisで管理するといった使い分けがされています。 |
3. リレーショナルデータベースの基本概念
この講座では、最も広く使われているリレーショナルデータベースを中心に学んでいきます。ここでは、リレーショナルデータベースの基本的な概念を紹介します。
3.1 テーブル
テーブル(Table)は、リレーショナルデータベースにおけるデータの基本的な格納単位です。テーブルは行(Row)と列(Column)で構成されており、Excelのシートに似た構造をしています。
たとえば、ユーザ情報を管理するusersテーブルは以下のようになります。
| id | name | age | |
|---|---|---|---|
| 1 | 田中太郎 | tanaka@example.com | 28 |
| 2 | 佐藤花子 | sato@example.com | 32 |
| 3 | 鈴木一郎 | suzuki@example.com | 25 |
この例では、id、name、email、ageが列(カラム)にあたり、データの属性(項目)を定義しています。各行(レコードとも呼びます)が1件分のデータを表しています。
3.2 主キー
主キー(Primary Key)は、テーブル内の各行を一意に識別するための列です。主キーに設定された列の値は、テーブル内で重複することが許されません。
先ほどのusersテーブルでは、id列が主キーです。idが1のレコードは1件しか存在しないため、特定のユーザを確実に識別できます。名前やメールアドレスは将来的に重複する可能性がありますが、主キーとして設定したidは常に一意であることが保証されます。
3.3 外部キー
外部キー(Foreign Key)は、あるテーブルの列が別のテーブルの主キーを参照する仕組みです。外部キーを使うことで、テーブル同士を関連付けることができます。
usersテーブルとpostsテーブルの関係を図に示します。1人のユーザが複数の投稿を持つ1対多の関係です。
erDiagram
users ||--o{ posts : "1対多"
users {
int id PK
string name
string email
int age
}
posts {
int id PK
string title
string content
int user_id FK
}
たとえば、ユーザが投稿した記事を管理するpostsテーブルを考えてみましょう。
| id | title | content | user_id |
|---|---|---|---|
| 1 | 初めての投稿 | こんにちは! | 1 |
| 2 | Pythonの勉強 | Pythonを始めました | 2 |
| 3 | 今日の出来事 | 今日は天気が良かった | 1 |
postsテーブルのuser_id列は、usersテーブルのid列を参照する外部キーです。user_idが1のレコードは、usersテーブルのidが1である「田中太郎」さんが投稿した記事であることを示しています。このように、外部キーを使うことで、テーブル間の関連(リレーション)を表現できます。
| 💡 ポイント |
|---|
| リレーショナルデータベースでは、1つの大きなテーブルにすべてのデータを詰め込むのではなく、関連するデータごとにテーブルを分け、外部キーで関連付ける設計が基本です。この設計を正規化と呼びます。正規化により、データの重複を避け、整合性を保ちやすくなります。 |
4. SQLの概要
SQL(Structured Query Language)は、リレーショナルデータベースに対してデータの抽出、挿入、更新、削除といった操作を行うためのデータベース操作言語です。
ここでは、以下のような「名前」「年齢」「電話番号」「住所」のカラムで構成されたテーブルを例に、それぞれの操作の概要を見ていきます。
| 名前 | 年齢 | 電話番号 | 住所 |
|---|---|---|---|
| 佐藤太郎 | 35 | 090-1234-5678 | 東京都新宿区 |
| 田中花子 | 28 | 080-2345-6789 | 大阪府大阪市 |
| 鈴木一郎 | 42 | 070-3456-7890 | 愛知県名古屋市 |
4.1 データの抽出(SELECT)
データの抽出は、テーブルの中から特定の条件を満たすレコードを取り出す操作です。たとえば、名前が「佐藤太郎」であるデータを抽出すると、以下の結果が得られます。
| 名前 | 年齢 | 電話番号 | 住所 |
|---|---|---|---|
| 佐藤太郎 | 35 | 090-1234-5678 | 東京都新宿区 |
テーブルに3件のデータがある中から、条件に合う1件だけが取り出されます。
4.2 データの挿入(INSERT)
データの挿入は、テーブルに新しいレコードを追加する操作です。たとえば「山田次郎、30歳、060-4567-8901、福岡県福岡市」というデータを挿入すると、テーブルは以下のようになります。
| 名前 | 年齢 | 電話番号 | 住所 |
|---|---|---|---|
| 佐藤太郎 | 35 | 090-1234-5678 | 東京都新宿区 |
| 田中花子 | 28 | 080-2345-6789 | 大阪府大阪市 |
| 鈴木一郎 | 42 | 070-3456-7890 | 愛知県名古屋市 |
| 山田次郎 | 30 | 060-4567-8901 | 福岡県福岡市 |
もともと3件だったデータに、新しい1件が追加されて4件になります。
4.3 データの更新(UPDATE)
データの更新は、すでに存在しているレコードの値を変更する操作です。たとえば佐藤太郎の住所を「東京都新宿区」から「神奈川県横浜市」に更新すると、テーブルは以下のようになります。
| 名前 | 年齢 | 電話番号 | 住所 |
|---|---|---|---|
| 佐藤太郎 | 35 | 090-1234-5678 | 東京都新宿区 → 神奈川県横浜市 |
| 田中花子 | 28 | 080-2345-6789 | 大阪府大阪市 |
| 鈴木一郎 | 42 | 070-3456-7890 | 愛知県名古屋市 |
レコード自体は増減せず、指定したレコードの値だけが変更されます。
4.4 データの削除(DELETE)
データの削除は、すでに存在するレコードをテーブルから取り除く操作です。たとえば佐藤太郎のデータを削除すると、テーブルは以下のようになります。
| 名前 | 年齢 | 電話番号 | 住所 |
|---|---|---|---|
| 田中花子 | 28 | 080-2345-6789 | 大阪府大阪市 |
| 鈴木一郎 | 42 | 070-3456-7890 | 愛知県名古屋市 |
もともと3件だったデータから、該当する1件が削除されて2件になります。
5. 代表的なリレーショナルデータベース管理システム
リレーショナルデータベースを管理するソフトウェアをRDBMS(Relational Database Management System)と呼びます。ここでは、代表的なRDBMSを紹介します。
5.1 MySQL
MySQLは、世界で最も広く使われているオープンソースのRDBMSです。Webアプリケーションとの相性が良く、WordPress、Twitter(現X)、Facebookなど、多くの大規模サービスで採用されています。Oracle社が開発を主導しており、無料で利用できるCommunity Editionと、サポートや追加機能が含まれるEnterprise Editionがあります。
5.2 PostgreSQL
PostgreSQLは、高度な機能と標準SQL準拠を重視したオープンソースのRDBMSです。JSON型のデータを扱える機能や、高度な全文検索機能など、MySQLにはない拡張性を持っています。データの整合性や信頼性が特に重視される業務システムや、複雑なクエリが必要なアプリケーションで多く採用されています。
5.3 Oracle Database
Oracle Databaseは、Oracle社が開発・提供する商用のRDBMSです。大規模な企業システムや金融機関、官公庁など、高い信頼性とパフォーマンスが求められる環境で長年にわたり採用されています。高度なトランザクション管理やセキュリティ機能、大量データの処理能力に優れており、ミッションクリティカルなシステムにおいて高いシェアを持っています。商用ライセンスが必要なため、MySQLやPostgreSQLと比べてコストはかかりますが、手厚いサポートと豊富な実績が強みです。
| 💡 ポイント |
|---|
| この講座および後続のハンズオンでは、MySQLを使用します。次の講座でMySQLのインストール方法を説明しますので、先に進む前にインストールを完了してください。 |
6. まとめ
この講座では、データベースの基本概念について学びました。
- データベースは、大量のデータを効率的に保存・管理・検索するための仕組み
- データベースにはリレーショナルデータベースやNoSQLデータベースなどの種類がある
- リレーショナルデータベースでは、データをテーブル(行と列)の形式で管理する
- 主キーでテーブル内の各行を一意に識別し、外部キーでテーブル同士を関連付ける
- SQLはリレーショナルデータベースを操作するための言語で、データの抽出(SELECT)、挿入(INSERT)、更新(UPDATE)、削除(DELETE)ができる
- 代表的なRDBMSとしてMySQL、PostgreSQL、Oracle Databaseがある