5.
データベース設計
データベース設計の概要
データベース設計とは
データベース設計は、システムやアプリケーションが効率的かつ効果的にデータを管理・操作できるように、データベースの構造やそのデータの関係性を設計するプロセスです。データの構造、制約、リレーションシップ、パフォーマンスの最適化を考慮し、システムが正確でスムーズに機能するための重要な設計です。
データベース設計の目的
データの効率的な保存と管理
無駄のないデータ保存とデータ取得、冗長性や重複を排除します。
データの整合性の確保
正確なデータが一貫して管理されるようにし、データの不整合や矛盾を防止します。制約(主キー、外部キー、ユニーク制約、NOT NULLなど)でデータの正確性を保証します。
パフォーマンスの最適化
大量のデータに対してもクエリが高速に実行できるよう、インデックスや適切なデータ型を利用してパフォーマンスを最適化します。
リレーションシップ
テーブル間の関係(リレーション)を定義し、データの関連性を管理します。
データの整合性
データベース内でデータの一貫性を保つため、制約やリレーションを設定します。
スケーラビリティ
将来的にデータ量が増加した場合にも、システムがパフォーマンスを維持できるように設計します。
データベース設計の主な手順
項目 | 説明 |
---|---|
要件定義 | システムがどのようなデータを扱い、どのような処理が必要かを定義 |
概念設計 | Entity(実体)、Property(属性)、Relationship(関係)などを抽象的に定義 |
論理設計 | Entityがテーブル、Propertyがカラム、Relationshipが外部キーなどで設計 |
物理設計 | 論理設計をDBMSに実装できる形に変換。パーティショニング、パフォーマンスなども設計 |
実装 | データベース設計を、DBMS(MySQL、PostgreSQL、Oracleなど)に実装 |
テストと最適化 | 実装されたデータベースが期待通りに動作するかをテスト |
テーブル定義書
テーブル定義書とは
テーブル定義書は、データベース設計において、各テーブルの構造や詳細情報のドキュメントです。リレーショナルデータベースではSQLを作成する必要がありますが、内部設計では、SQLを作成する前にテーブル定義書を作成するのが一般的です。
テーブル定義書の内容
テーブル定義書には、以下の要素が含まれます。
項目 | 説明 | 備考 |
---|---|---|
データベース名 | データベースのスキーマ名前 | |
テーブル名 | データを格納するテーブル名前 | |
カラム名 | テーブル内の各カラムの名前 | |
データ型 | 各カラムに格納されるデータの型 | INT, VARCHAR, DATE, BOOLEAN |
制約 | カラムやテーブルに対して設けられる制約 | PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL |
デフォルト値 | カラムデータがNULLのデフォルトの値 | |
インデックス | 検索性能向上など、特定のカラムに設定するインデックス | |
リレーション | テーブル間の関係性 | 1対多、多対多など |
トリガーや制約 | データ更新時に自動的に実行される処理 | 価格の変更に伴う在庫調整など |
エンジン | データベースのストレージエンジン | MySQLのInnoDB、PostgreSQLの標準エンジンなど |
説明 | 各テーブルやカラム、制約の役割や目的の説明 |
SQL
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL DEFAULT NULL
);
テーブル定義書の例
概要
項目 | 内容 |
---|---|
テーブル名 | users |
説明 | ユーザーの情報を管理 |
エンジン | InnoDB |
作成者 | 東京 太郎 |
作成日 | 2022/09/01 |
更新日 | 2022/10/11 |
カラム定義
カラム名 | データ型 | 制約 | デフォルト値 | 説明 |
---|---|---|---|---|
id | INT | PRIMARY KEY, AUTO_INCREMENT | なし | ユーザーを一意に識別するID |
username | VARCHAR(50) | UNIQUE, NOT NULL | なし | ユーザーのログイン名 |
VARCHAR(100) | UNIQUE, NOT NULL | なし | ユーザーのメールアドレス | |
password | VARCHAR(255) | NOT NULL | なし | ハッシュ化されたユーザーのパスワード |
created_at | DATETIME | NOT NULL | CURRENT_TIMESTAMP | ユーザーの作成日時 |
updated_at | DATETIME | NULL | NULL | ユーザー情報の最終更新日時 |
インデックス
インデックス名 | カラム |
---|---|
idx_username | username |
idx_email |
リレーション
テーブル | 関係 | 外部キー制約 |
---|---|---|
orders | 1対多 | users.id = orders.user_id |
ER図
ER図とは
ER図(Entity-Relationship Diagram)は、データベース設計において、データの構造や関係性を視覚的に表現する図です。システム内のデータやそのデータ間の関係を視覚的に整理し、データベースの設計や理解を助けます。

ER図の主な要素
ER図は主に以下の3つの要素で構成されます。
Entity(エンティティ)
Entityは、データベース内で保存される対象(実体)です。たとえば「ユーザー」や「注文」など、システム内で管理する対象です。
Attribute(属性)
Attributeは、Entityが持つデータの個別項目を指します。たとえば、「users」テーブルには「ユーザー名」「メールアドレス」「パスワード」などのAttributeが含まれ、カラムに対応します。Attributeは楕円形で表されます。
Relationship(リレーションシップ)
Relationshipは、Entity間の関係を表します。たとえば、「ユーザー」が「注文」を行うという関係は、ユーザーエンティティと注文エンティティの間のリレーションシップです。Relationshipは菱形で表されます。
ER図の記号と構成
項目 | 説明 | 記号 |
---|---|---|
Entity | データベースで管理される主な対象 | 四角形 |
Attribute | Entityが持つデータの詳細 | 楕円形 |
Relationship | Entity間の関係性 | 菱形 |
Primary Key | 各Entityの一意の識別子 | 下線 |
Foreign Key | 他のEntityとの関連を示す属性 | |
Cardinality | 他のEntityとの関連を示す属性 | 1:1、1:N、N:N |
データベース定義のツール
データベース定義書を作成する際、効率的に作業を進めるためのツールは多く存在します。データベース設計、ER図、スキーマ定義、リレーションの可視化、ドキュメントの自動作成など、さまざまな機能を提供しています。
テーブル定義書作成ツール
Excel
Excelは利用頻度が高いソフトのため、データベース定義書作成で利用されることが多くあります。Excelでテンプレートを作成しておけば、誰でも閲覧・編集ができるのがメリットです。

A5:SQL Mk-2
A5:SQL Mk-2は、Windows用のフリーのデータベースクライアントです。データベース管理の他に、Excelフォーマットでテーブル定義書がエクスポートできます。

ER図ツール
Draw.io (diagrams.net)
Draw.ioは、無料で利用できるオンライン図作成ツールで、ER図の他にフローチャート、UML図などもサポートしています。クラウドストレージ(Google DriveやDropbox)と連携可能です。
MySQL Workbench
MySQL用の公式ツールで、データベースの設計、ER図作成、スキーマ定義が行えます。データベースからER図を自動生成するリバースエンジニアリング機能も備えています。

https://www.mysql.com/products/workbench/
Mermaid
Mermaidは、Markdown内でダイアグラムを描画できるツールで、ER図やフローチャートなどの図をコード形式で生成できる便利なツールです。
ER図のMermaid
erDiagram
users {
int id PK
string username
string email
string password
datetime created_at
datetime updated_at
}
orders {
int id PK
datetime order_date
int user_id FK
}
products {
int id PK
string name
decimal price
}
order_items {
int id PK
int order_id FK
int product_id FK
int quantity
}
users ||--o{ orders : "places"
orders ||--o{ order_items : "contains"
products ||--o{ order_items : "listed in"
Microsoft Visio
Microsoftのプロフェッショナル向け図作成ツールで、ER図やデータベーススキーマを視覚的に設計可能です。Microsoft SQL Serverとの連携も強力です。

https://www.microsoft.com/ja-jp/microsoft-365/visio/flowchart-software