【データベース】データベースの概要と主要概念 - j-komatsu/myCheatSheet GitHub Wiki
データベースの概要と主要概念
データベースは、情報を整理して保存し、必要なときに効率よく取り出せるようにする仕組みです。これを図書館や本棚のようなものだと考えてみてください。本棚には本が整理されていますよね?データベースもそれと同じです。
以下、データベースの基本概念を初学者にもわかりやすく、具体例を交えて説明します。
データベースの基本要素
1. ユーザー(User)
データベースにアクセスする人、またはプログラムを指します。ユーザーは権限(誰が何をできるか)によって操作範囲が決まります。
例:
- 小学生向け: クラスの図書係は本を借りたり、返却を記録できますが、先生だけが新しい本を本棚に追加できます。
- 技術者向け: データベースでは、ユーザーには
SELECT
やINSERT
などの権限が割り当てられます。
ユーザー名 | 権限 |
---|---|
student |
本を借りる権利 |
librarian |
本を追加する権利 |
2. スキーマ(Schema)
スキーマはデータベースの構造を定義する設計図のようなものです。どの棚にどんな種類の本があるかを示します。
例:
- 小学生向け: 国語の教科書は左の棚、算数は右の棚に置くルール。
- 技術者向け: スキーマはテーブル(表)の集合で、どんなデータ型を使うか、どんな制約があるかを定義します。
graph LR
スキーマ -->|含む| テーブル1
スキーマ -->|含む| テーブル2
3. シノニム(Synonym)
シノニムは、別名を付ける仕組みです。本名を知らなくても、ニックネームで呼び出せるようにするものです。
例:
- 小学生向け: 田中さんは「たっくん」と呼ばれている。
- 技術者向け: データベース内の複雑な名前を簡単な名前に置き換えることで操作が楽になります。
CREATE SYNONYM easy_name FOR complicated_table_name;
4. DBリンク(DB Link)
DBリンクは、別のデータベースと通信するための架け橋です。
例:
- 小学生向け: 隣のクラスの図書館と交換日記でやり取りをする。
- 技術者向け: 異なるデータベース間でデータをやり取りできます。
CREATE DATABASE LINK other_db_link CONNECT TO user IDENTIFIED BY password USING 'remote_db';
graph TD
DB1 -->|DBリンク| DB2
データベースの操作例
基本操作(CRUD)
- Create(作成): 新しいデータを追加する。
- Read(読み取り): データを取得する。
- Update(更新): 既存データを変更する。
- Delete(削除): データを削除する。
例:
-
小学生向け:
- Create: ノートを新しく用意する。
- Read: ノートの内容を読む。
- Update: ノートに新しい情報を書く。
- Delete: 古いノートを捨てる。
-
技術者向け:
-- Create
INSERT INTO books (id, title, author) VALUES (1, 'Harry Potter', 'J.K. Rowling');
-- Read
SELECT * FROM books;
-- Update
UPDATE books SET title = 'Harry Potter and the Chamber of Secrets' WHERE id = 1;
-- Delete
DELETE FROM books WHERE id = 1;
データ型の詳細な解説
データ型 | 説明 | 使用例 |
---|---|---|
INT |
整数型。数値を保存する | りんごの数(3, 5など) |
VARCHAR |
可変長の文字列型。テキストを保存する | 名前("たろう"など) |
DATE |
日付型。日付データを保存する | 誕生日("2025-01-26") |
graph TD
INT[整数] -->|使い方| 数値データ
VARCHAR[文字列] -->|使い方| テキストデータ
DATE[日付] -->|使い方| 日時データ
正規化とデータ設計の基礎
正規化の例
- 第1正規形: 重複するデータを1つの表にまとめる。
- 第2正規形: 主キーに完全に依存しない列を別の表に分離する。
- 第3正規形: 別の列に依存する列を分離する。
初学者向け:
「クラスの生徒名簿に同じ情報を何度も書くのではなく、別々のノートに整理して書く」
erDiagram
STUDENT {
int id
string name
}
CLASS {
int id
string subject
}
STUDENT ||--|| CLASS : "enrolls in"
トランザクションとACID特性
トランザクションの基本操作
BEGIN TRANSACTION
: トランザクションを開始する。COMMIT
: 変更を保存する。ROLLBACK
: 変更を取り消す。
例:
BEGIN TRANSACTION;
INSERT INTO accounts (id, balance) VALUES (1, 1000);
ROLLBACK; -- 元に戻す
バックアップとリカバリの手法
バックアップの重要性
- 初学者向け: 「学校の図書館が火事になったら?事前に本のリストを別の場所にコピーしておく」。
技術者向け例:
mysqldump -u root -p my_database > backup.sql
索引(インデックス)とパフォーマンスチューニング
索引の例
- 初学者向け: 本を探すときに目次を使う。
- 技術者向け:
CREATE INDEX idx_books_title ON books (title);
権限管理とセキュリティ
ユーザー管理例:
GRANT SELECT ON books TO student_user;
REVOKE INSERT ON books FROM student_user;
分散データベースとレプリケーション
概念説明
- 初学者向け: 「別の図書館にも同じ本を用意しておくと便利」。
SQLの高度な機能
ウィンドウ関数の例:
SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank FROM students;
sequenceDiagram
User->>Database: INSERT INTO books
Database-->>User: Acknowledgment
User->>Database: SELECT * FROM books
Database-->>User: Query Results
データベースのトラブルシューティング
デッドロック解消例:
SHOW ENGINE INNODB STATUS;
まとめ表
項目 | 説明 | 初学者例 | 技術者例 |
---|---|---|---|
ユーザー | データベースを利用する人やプログラム | 図書係 | 権限を持つデータベースアカウント |
スキーマ | データベース構造の設計図 | 教科書の配置ルール | テーブルやビューの集合 |
シノニム | 別名を付ける仕組み | ニックネーム | 複雑なテーブル名を短くする |
DBリンク | 他データベースとの接続 | 隣のクラスとの通信 | 異なるDB間でデータをやり取り |
データ型 | データの種類 | 数値、文字、日付など | INT、VARCHAR、DATE |
学びを深めるために
- より詳しいSQL構文の練習をする。
- データベース設計の基礎(正規化など)を学ぶ。
- 小さなプロジェクトを通じて実際にデータベースを構築してみる。