ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
データベースの大分類
| 分類 | 代表製品 | 得意 | 苦手 |
|---|---|---|---|
| RDBMS | MySQL / PostgreSQL / Oracle / SQL Server | 整合性・複雑クエリ・JOIN | 水平スケール |
| KVS | Redis / Memcached / DynamoDB | 高速・キャッシュ | 複雑クエリ |
| ドキュメント | MongoDB / Couchbase | スキーマレス・JSON 自然 | JOIN・トランザクション |
| カラム指向 | Cassandra / HBase / ClickHouse | 大量書き込み・分析 | 個別行参照 |
| グラフ | Neo4j / Amazon Neptune | 関係探索・推薦 | 大量バルク処理 |
| 時系列 | InfluxDB / TimescaleDB | 計測データ・IoT | 汎用 OLTP |
| NewSQL | CockroachDB / TiDB / Spanner | 水平スケール + ACID | 運用ノウハウ未成熟 |
| 全文検索 | Elasticsearch / OpenSearch / Solr | あいまい検索・スコアリング | 更新の即時性 |
主要 RDBMS の特徴
| 製品 | ライセンス | 特徴 | 主な用途 |
|---|---|---|---|
| MySQL | GPL + Oracle 商用 | 軽量・採用実績豊富 | Web アプリ全般 |
| MariaDB | GPL | MySQL フォーク、互換性高 | OSS 志向の Web |
| PostgreSQL | PostgreSQL ライセンス | SQL 標準準拠・拡張機能豊富 (PostGIS, pg_trgm) | 分析系・GIS・複雑要件 |
| Oracle Database | 商用 | 最高性能・大規模本番運用 | 金融・基幹システム |
| SQL Server | 商用 | Windows と密接連携 (T-SQL) | Windows 系業務 |
| SQLite | パブリックドメイン | ファイル DB・組み込み | モバイル・テスト・小規模 |
ACID とトランザクション
ACID は RDBMS が満たす 4 つの性質です:
| 性質 | 意味 | 例 |
|---|---|---|
| Atomicity(原子性) | 全実行か全取消か | 振込で片方だけ反映されない |
| Consistency(整合性) | 制約を常に満たす | FK 違反は commit させない |
| Isolation(隔離性) | 同時実行が直列実行と同じ | ダーティリードを防ぐ |
| Durability(耐久性) | commit 後は失われない | クラッシュ後も復旧可能 |
-- トランザクションの基本
BEGIN; -- または START TRANSACTION
UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
UPDATE accounts SET balance = balance + 1000 WHERE id = 2;
-- すべて成功したら確定
COMMIT;
-- 途中でエラーなら取り消し
ROLLBACK;
-- 分離レベル
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; -- PG/Oracle 既定
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- MySQL InnoDB 既定
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- 最高、ロック競合増
正規化(Normal Form)
| 正規形 | 条件 | 違反例 |
|---|---|---|
| 第 1 正規形 (1NF) | 1 セル 1 値(繰り返しグループ無し) | tags = "PHP,Laravel,MySQL" |
| 第 2 正規形 (2NF) | 1NF + 部分関数従属を排除 | 複合キーの一部にだけ依存する列 |
| 第 3 正規形 (3NF) | 2NF + 推移的関数従属を排除 | user_id → dept_id → dept_name の dept_name 持ち込み |
| BCNF / 4NF / 5NF | より厳格な分解 | 実務ではあまり意識しない |
実務では「3NF を基本としつつ、検索が遅い部分は意図的に非正規化」がセオリーです。
インデックスと外部キー
-- 主キー(自動的にユニークインデックスが作られる)
CREATE TABLE users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(255) NOT NULL UNIQUE, -- UNIQUE インデックス
name VARCHAR(100) NOT NULL,
created_at DATETIME NOT NULL
);
-- 通常インデックス
CREATE INDEX idx_users_created_at ON users (created_at);
-- 複合インデックス(先頭列から左寄せで使われる)
CREATE INDEX idx_orders_user_status ON orders (user_id, status);
-- 部分インデックス(PostgreSQL)
CREATE INDEX idx_orders_active ON orders (created_at) WHERE status = 'active';
-- 外部キー制約
CREATE TABLE orders (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
amount INT,
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
レプリケーションとシャーディング
| 手法 | 目的 | 仕組み |
|---|---|---|
| 主従レプリケーション | 読み取り負荷分散・冗長化 | 書きは Primary、読みは Replica |
| マルチマスター | 書き込みも分散 | 競合解決が必要 (Galera, BDR) |
| シャーディング | 巨大データの水平分割 | ユーザー ID 等でハッシュ分散 |
| パーティショニング | 巨大テーブル内分割 | 日付や ID で分割 (RANGE/HASH/LIST) |
| Read Replica | クラウドの非同期 Replica | RDS / Cloud SQL の機能 |
NoSQL の概要
// MongoDB(ドキュメント型)
db.users.insertOne({
name: "taro",
age: 30,
tags: ["php", "laravel"],
address: { city: "Tokyo", zip: "100-0001" }
});
db.users.find({ age: { $gte: 18 }, "address.city": "Tokyo" });
// Redis(KVS)
SET user:1:name "taro"
EXPIRE user:1:name 3600
LPUSH queue:emails "user@example.com"
HSET user:1 name "taro" age 30
ZADD leaderboard 1500 "alice" 1800 "bob"
ORM(Object-Relational Mapping)
| 言語 | 代表 ORM |
|---|---|
| PHP | Eloquent (Laravel) / Doctrine (Symfony) |
| Java | Hibernate / JPA / MyBatis |
| Python | SQLAlchemy / Django ORM |
| Node.js | Prisma / TypeORM / Sequelize |
| Ruby | ActiveRecord (Rails) |
| Go | GORM / sqlc / ent |
| C# | Entity Framework Core |
ER 図(Entity Relationship Diagram)
テーブル間の関係を可視化する図。1:1 / 1:N / N:M を矢印で表現します。
- 1:1 — ユーザー ↔ プロフィール
- 1:N — ユーザー → 注文(一人が複数注文)
- N:M — 学生 ↔ 科目(中間テーブルが必要)
用途別 DB 選定の目安
| 用途 | 推奨 |
|---|---|
| Web アプリ全般 | MySQL / PostgreSQL |
| キャッシュ・セッション | Redis |
| 大量ログ・イベント | Elasticsearch / ClickHouse |
| IoT 計測データ | InfluxDB / TimescaleDB |
| 金融基幹 | Oracle / SQL Server |
| サーバーレス・低運用 | DynamoDB / Firestore |
| 分析・BI | BigQuery / Snowflake / Redshift |
FAQ
Q: MySQL と PostgreSQL、どちらを選べばいい?
A: シンプル & レプリケーション豊富なら MySQL、複雑クエリ & 拡張機能 (PostGIS, JSONB) なら PostgreSQL。新規案件は PostgreSQL の採用が増えています。
Q: NoSQL を採用すべきタイミングは?
A: スキーマが頻繁に変わる、JOIN が不要、水平スケールが必須、のいずれかが当てはまるとき。大抵の Web アプリは RDBMS + Redis で十分です。
Q: ORM と生 SQL、どう使い分ける?
A: 基本は ORM、大量データ集計など性能クリティカルな箇所だけ生 SQL。混在は普通の構成です。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
同階層のページ
- 基本構文
- データベース関連
- テーブル関連
- ユーザー関連
- メタデータ関連
- NULL判定を伴うCASE文の使用方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?