データベーススキーマを正規化する
正規化はデータの冗長性を減らし、整合性を高めます。1NF、2NF、3NF、BCNF を実践的な例で学びましょう。
- 1
正規形:第 1 正規形(原子的な値、繰り返しグループなし)、第 2 正規形(第 1 正規形 + 複合キーへの部分従属なし)、第 3 正規形(第 2 正規形 + 推移的関数従属なし)、BCNF(第 3 正規形 + すべての決定因子が候補キー)。各正規形は冗長性と更新異常を減らします。ほとんどの実用アプリケーションは第 3 正規形または BCNF を使います。
- 2 SQL フォーマッター →
スキーマ DDL(CREATE TABLE ステートメント)を整形して、構造を見直します。繰り返しグループ(第 1 正規形違反)、キーの一部への従属(第 2 正規形違反)、非キーへの従属(第 3 正規形違反)を探してください。整形すると、スキーマの構造とリレーションシップが明確になります。
- 3 テーブル編集&変換ツール →
テーブル構造とリレーションシップを可視化します。冗長なデータ(同じ情報が複数箇所に保存されている)と関数従属(どの列がどの列を決定するか)を特定します。スキーマがどの正規形を満たすか、何を修正すべきかの把握に役立ちます。
よくある質問
- 常に第 3 正規形まで正規化すべきですか?
- OLTP(トランザクション処理)システムでは、そのとおりです。第 3 正規形/BCNF は冗長性と異常を減らします。OLAP(分析)システムでは、非正規化(スター/スノーフレークスキーマ)が好まれます。結合が減り、クエリが速くなるからです。トレードオフは次のとおりです。正規化は書き込み効率と整合性を向上させ、非正規化は読み取り性能を向上させます。
- 更新異常とは何ですか?
- 非正規化スキーマでは、挿入異常(従業員がいない部署を追加できない)、削除異常(最後の従業員を削除すると部署情報が失われる)、更新異常(部署名の変更ですべての従業員行を更新する必要がある)が起きます。正規化は、関心事を別々のテーブルに分離することでこれらを解消します。
このタスクを解決するワークフロー
関連ツール
SQL フォーマッター
Beautify or minify SQL queries online. Uppercase keywords, indent clauses, or compress to a single line。無料、プライベート、100%クライアントサイド。 ツール
テーブル編集&変換ツール
Edit tabular data and export to CSV/JSON/HTML/Markdown。無料、プライベート、100%クライアントサイド。 ツール
JSON バリデーター
Validate JSON and pinpoint syntax errors by line and column。無料、プライベート、100%クライアントサイド。 ツール