コンテンツへスキップ
uencoder

データベーススキーマを正規化する

正規化はデータの冗長性を減らし、整合性を高めます。1NF、2NF、3NF、BCNF を実践的な例で学びましょう。

  1. 1

    正規形:第 1 正規形(原子的な値、繰り返しグループなし)、第 2 正規形(第 1 正規形 + 複合キーへの部分従属なし)、第 3 正規形(第 2 正規形 + 推移的関数従属なし)、BCNF(第 3 正規形 + すべての決定因子が候補キー)。各正規形は冗長性と更新異常を減らします。ほとんどの実用アプリケーションは第 3 正規形または BCNF を使います。

  2. 2
    SQL フォーマッター →

    スキーマ DDL(CREATE TABLE ステートメント)を整形して、構造を見直します。繰り返しグループ(第 1 正規形違反)、キーの一部への従属(第 2 正規形違反)、非キーへの従属(第 3 正規形違反)を探してください。整形すると、スキーマの構造とリレーションシップが明確になります。

  3. 3
    テーブル編集&変換ツール →

    テーブル構造とリレーションシップを可視化します。冗長なデータ(同じ情報が複数箇所に保存されている)と関数従属(どの列がどの列を決定するか)を特定します。スキーマがどの正規形を満たすか、何を修正すべきかの把握に役立ちます。

よくある質問

常に第 3 正規形まで正規化すべきですか?
OLTP(トランザクション処理)システムでは、そのとおりです。第 3 正規形/BCNF は冗長性と異常を減らします。OLAP(分析)システムでは、非正規化(スター/スノーフレークスキーマ)が好まれます。結合が減り、クエリが速くなるからです。トレードオフは次のとおりです。正規化は書き込み効率と整合性を向上させ、非正規化は読み取り性能を向上させます。
更新異常とは何ですか?
非正規化スキーマでは、挿入異常(従業員がいない部署を追加できない)、削除異常(最後の従業員を削除すると部署情報が失われる)、更新異常(部署名の変更ですべての従業員行を更新する必要がある)が起きます。正規化は、関心事を別々のテーブルに分離することでこれらを解消します。

このタスクを解決するワークフロー

関連ツール