404 Not Found

404 Not Found


nginx

MySQLのデータベース設計と正規化理論

優れたデータベース設計は、システムの成功の礎となります。設計が不十分だと、将来的に終わりのない問題を引き起こす恐れがあります。

このレッスンでは、データベース設計の理論と実践について学びます。

1. 学習内容


2. 設計プロセス

100%
graph TB
    A[Requirements Analysis] --> B[Conceptual Design ER Diagram]
    B --> C[Logical Design Table Structure]
    C --> D[Physical Design Index/Partition]
    D --> E[Implementation and Deployment]
    E --> F[Operations and Maintenance Optimization]

3. パラダイム理論

パラダイム 要件
1NF フィールドはこれ以上分割できない 電話番号に複数のエントリが存在してはならない
2NF 部分依存関係の除去 主キー以外のフィールドは主キーに完全に依存している
3NF 推移性の排除 非主キーフィールドは、他の非主キーフィールドに依存してはならない
BCNF すべての決定要因が候補キーとなる 3NFのより厳格な形式

▶ 例:3NF 設計

SQL
-- Violation of 3NF (Department name depends on dept_id, not directly on employee id)
CREATE TABLE employees_bad (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    dept_id INT,
    dept_name VARCHAR(50)  -- Transitive dependency
);

-- ✅ Comply with 3NF
CREATE TABLE departments (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(id)
);
▶ 試してみよう

4. アンチパラダイム・デザイン

時には、パフォーマンスを優先するために、あえてルールを破ることもあります。

シナリオ アンチパラダイム的アプローチ 理由
頻繁なJOIN 冗長なフィールド JOINの削減
統計クエリ 計算列 リアルタイム計算の回避
レポート サマリーレポート クエリの高速化

5. 命名規則

ベストプラクティス 推奨事項 避けるべきこと
テーブル名 スネークケース、複数形 単数形、キャメルケース
フィールド名 スネークケース キャメルケース、中国語
主キー id userId
外部キー table_id customerId
インデックス idx_table_col table_col_idx

6. ER図の設計

100%
erDiagram
    CUSTOMERS ||--o{ ORDERS : places
    ORDERS ||--|{ ORDER_ITEMS : contains
    PRODUCTS ||--o{ ORDER_ITEMS : includes
    CUSTOMERS {
        int id PK
        string name
        string email
    }
    ORDERS {
        int id PK
        int customer_id FK
        decimal amount
        date order_date
    }
    PRODUCTS {
        int id PK
        string name
        decimal price
    }

❓ よくある質問

Q 3NFに従う必要はありますか?
A ほとんどの場合、はい。ただし、読み取りが多く書き込みが少ないシナリオでは、正規形から逸脱しても問題ありません。
Q 各フィールドにはどのようなデータ型を使用すべきですか?
A 主キーにはBIGINT、金額にはDECIMAL、日付と時刻にはTIMESTAMP、テキストにはVARCHARを使用してください。
Q テーブル名は単数形にするべきか、複数形にするべきか?
A 「レコードの集合」を示すため、複数形(users、orders)を使用することをお勧めします。
Q 3つの正規形に従う必要はありますか?
A 必ずしもそうとは限りません。高同時アクセス環境でのクエリでは、正規形から逸脱しても構いません。適切な冗長性を設けることで、JOINの回数を減らすことができます。
Q ER図の作成にはどのようなツールが利用できますか?
A MySQL Workbench(フォワードエンジニアリング/リバースエンジニアリング)、draw.io(無料のオンラインツール)、dbdiagram.io(コードからER図を生成)などです。

📖 まとめ


📝 練習問題

  1. 基本問題(難易度:⭐):ブログシステムのER図を作成してください。

  2. 応用問題(難易度 ⭐⭐):1NFのテーブルを3NFに正規化せよ。

  3. チャレンジ問題(難易度:⭐⭐⭐):ユーザー、商品、注文、支払いの各テーブルを含む、Eコマース用データベースを設計してください。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%