正規化は、データの重複や不整合を排除します。例えば、学校では、住所を更新するために学生テーブルを見ることは論理的ですが、同じテーブルに全ての学生のクラスをリストすることは冗長で非生産的です。これにより、教師や管理者は、学生関連のデータを簡単に表示・分析できます。
これは本質的にデータ正規化のパワーです。つまり、冗長性や非構造化性がないという意味で、システムに入力される全てのデータがクリーンであることを保証することで、データの消費と分析を容易にします。データ・スプロール(データの拡散)の時代ではそれを実現するのは容易ではありませんが、データの正規化を確実にするためにできることがいくつかあります。
データの正規化とは何か、なぜ重要なのか、データの正規化の形式、メリット、課題について見ていきましょう。
データの正規化とは?
前述のように、データの正規化は、冗長性や非構造化性を確保することでデータを「正規化」することです。どちらも整理が難しく、利用や管理が困難になるため、それを防ぐために正規化が行われます。正規化プロセスでは、大きなテーブルを小さな関連テーブルに分割し、データの重複を削減します。
データの正規化は、データの完全性とデータ衛生の重要な部分です。データ衛生に関しては、歯科医の診察を避けるために、毎朝毎晩歯を磨く行為として正規化を考えてみてください。歯をきれいにすればするほど、治療に費やす費用が少なくなり、歯磨き粉、フロス、水など、歯をきれいにするために使用するさまざまなリソースが効率的になります。
一般的な正規化の形式
データの正規化の形式は、基本的に階層に分類されたルールです。データは、2 番目の階層のルールを適用する前に 1 番目の階層のルールを満たし、3 番目の階層のルールを適用する前に 2 番目の階層のルールを満たす必要があります。
正規化の形式には、それぞれに固有の要件があります。
第一正規形(1NF)
データの正規化の最も基本的な形式である 1NF は、グループ内にエントリが繰り返されないことを保証します。つまり、各セルには単一の値しか存在せず、各レコードは一意です。
第二正規形(2NF)
2NF は 1NF のルールに基づいて構築されており、全てのエントリが 1NF 要件全てに準拠し、1 つの主キーが適用される必要があります。主キールールでは、データのサブセットごとに個別のテーブルを作成する必要があります。各テーブルのデータは、外部キーラベルにリンクできます。
第三正規形(3NF)
3NF は、全てのエントリが 2NF 要件の全てに準拠することを義務付けており、また、主キーに変更があった場合は、影響を受ける全てのデータを新しいテーブルに配置する必要があります。
ボイス・コッド正規形(3.5NF)
ボイス・コッド正規形は、BCNF または 3.5NF としても知られており、候補キーが重複していない 3NF テーブルです。これにより、全ての決定要因が候補キーとなり、機能の依存関係に関連する冗長性が排除されます。
第四正規形(4NF)
4NF は BCNF 準拠を必要とし、多値の依存関係に対処し、データが複数の行に重複しないようにします。
第五正規形(5NF)
5NF は、重複する関係が複数存在する場合に対応し、重複する関係が別々のテーブルで表されるようにします。
データの正規化のメリット
データの正規化には、次のような多くのメリットがあります。
データ・ストレージの最適化
データの正規化の主なメリットの 1 つは、ストレージ・スペースを解放することにあります。つまり、データ分析を特定のデータセットに絞り込むことができます。スペースが限られているため、データを迅速に取得できます。データベースは、データ管理システムがカバーする範囲が少なくなり、情報を見つけるのがより簡単になります。つまり、後で保存したい他のデータを保存するスペースも増えます。
例として、典型的なリテールの顧客体験のシナリオを考えてみましょう。ある店でセーターを買おうとしている人がいて、このお客さまに、セーターに合うズボンを非常にパーソナライズされた形で提案したいと思っています。もし、データ管理システムがこの顧客の嗜好に基づいた提案を見つけるために、ゴミだらけのデータ・ウェアハウスをふるいにかけなくてはならないとしたら、その提案を実際に提示する頃には手遅れで、顧客は店を出てしまっている可能性があります。
メンテナンスの簡素化
データの正規化により、保守や更新も容易になります。変更は通常、特定のテーブルにローカライズされるため、エラーのリスクが軽減され、データベース・スキーマの管理や更新が容易になります。
柔軟性
また、標準化されたデータベースは、ビジネス要件の変化に柔軟に対応できます。新しいデータの追加や既存の構造の変更は、データベース設計全体への影響が少なくて済みます。
一貫性
正規化では、データはテーブル間で一貫した方法で保存されるため、情報の競合の可能性を低減できます。この一貫性により、データの全体的な品質が向上します。
データの正規化の課題
正規化には多くのメリットがありますが、次のような潜在的なトレードオフがあります。
複雑さ
正規化のレベルが上がると、データベーススキーマはより複雑になります。正規化されたテーブルをクエリに組み込むことはより複雑になり、クエリの複雑さと実行時間の増加につながる可能性があります。
読み取り集中型操作の性能
読み取り集中型操作が普及している状況では、正規化されたデータベースが性能の課題を経験する可能性があります。データを取得するために複数のテーブルを結合することは、特に大規模なデータベースではリソースを多く消費する場合があります。
トレーニングと学習
データの正規化は非常に複雑であるため、チームや社内のどこかにその知識を持つ必要があります。まだ知識がない場合は、それを得る方法を見つける必要があります。これは、第三者のリソースにお金を費やすことを意味するかもしれません。
過剰正規化のリスク
過剰正規化、または必要以上の正規化の適用は、不要な複雑さや性能の問題を引き起こす可能性があります。アプリケーションの特定の要件に基づいて、バランスを取り、データを適切な程度に正規化することが重要です。
更新の異常
正規化は、特定の種類の異常を排除するのに役立ちますが、更新の異常を引き起こす可能性があります。例えば、1 つのテーブル内の情報を更新する場合は、複数の場所で更新が必要になる場合があり、エラーや不整合が発生する可能性が高まります。
ストレージ要件の増大
場合によっては、正規化によってストレージ要件が増大することがあります。これは、正規化されたテーブルが主キーと外部キーのリレーションシップのために追加のストレージを必要とする場合があり、スペース最適化のメリットが特定の状況では十分に実現されない可能性があるためです。
書き込み性能への影響
読み取り操作は結合の複雑さによって影響を受ける可能性がありますが、挿入や更新などの書き込み操作も影響を受ける可能性があります。正規化されたテーブルは、参照整合性を維持するために複数の操作を必要とする場合があり、書き込み性能に影響を与える可能性があります。
クエリ最適化の課題
高度に正規化されたデータベースでクエリを最適化するには、慎重に検討し、調整する必要がある場合があります。データベース管理者は、最適な性能を確保するために、適切なインデックスを作成し、クエリ実行計画を分析する必要がある場合があります。
非正規化
データ正規化の代替手段は、データの非正規化です。データの正規化では、大きなテーブルを小さなテーブルに分割します。非正規化では、データを単一のテーブルにマージし、クエリを高速化できます。
データの正規化は、通常、コストのかかるテーブル結合が多いシナリオでより優れています。一方、非正規化は、コストのかかる結合クエリが多い場合に便利です。正規化は、データの整合性とディスク容量の最適化を提供し、データの一貫性とデータの挿入と削除の高速化を実現します。非正規化は、通常、より高速な検索が必要で、読み取り性能を最適化したい場合に適しています。非正規化は、データの過剰正規化や複雑なテーブル結合によって生じるオーバーヘッド・コストも削減できます。
正規化と非正規化の適切なバランスを取ることが重要です。正規化のレベルは、アプリケーションの特定の要件と、データの取得と変更の予想されるパターンにあわせて調整する必要があります。リレーショナル・データベースの読み取り、書き込み、インデックスの性能のバランスがとれるために、ビジネス・アプリケーションでは 3NF を採用していることが非常に一般的です。多くの場合、それ以上のものは良くありません。追加の正規化は、実際には、過剰な読み取りと書き込みを引き起こし、テーブル上で結合を行うときに遅延や過剰なロックを発生させることで、システムを遅くする可能性があります。
まとめ
データの正規化は、データがどのようにデータベースに入力されるかについて特定のルールを適用することで、データの整合性、検索可能性、分析を向上させます。データがどのように入力されるかを決定するために使用される一般的なデータ形式は、1NF、2NF、3NF、BCNF、4NF、5NFです。
データの正規化は、柔軟性、ストレージの最適化、保守の容易さなどの明確なメリットをもたらしますが、複雑さや書き込み性能の低下などの欠点もあります。
とはいえ、データの正規化は、構造化された効率的なデータベースを維持する上で重要な部分を占めており、あらゆるデータ・パイプラインにおける重要なデータ・クリーニング・ステップであり、効率性を高め、コストを削減します。
ピュア・ストレージは、クラウド・ストレージのコストを最大 50% 削減します。