データベース設計と正規化
データベース設計と正規化は、リレーショナルスキーマを構造化し、データが忠実に表現され、冗長性およびそれが引き起こす更新、挿入、削除の異常を排除するための規律です。
PaperMindでテーマを探す近日公開Find papers & topics
Tools & resources
Learn & explore
動画近日公開
Definition
正規化とは、元のスキーマの情報内容を保持しつつ、属性間に存在する関数従属性および多値従属性に導かれ、冗長性を減らし異常を回避するためにリレーションを分解するプロセスです。
Scope
この分野は、リレーショナルスキーマを洗練させるための理論と実践を扱います。設計を推進する意味的制約としての関数従属性と多値従属性、正規形の階層(1NFからBCNF、4NFまで)、および非損失結合と、可能な場合は従属性を維持しながら冗長性を排除するためのリレーションの分解が含まれます。エンティティ関係図(データモデルとクエリ言語で扱われます)のような概念モデリング表記法や、インデックス作成のような物理設計の選択は除外されます。
Sub-topics
Core questions
- リレーションの属性間にどのような関数従属性と多値従属性が存在するか?
- 冗長性はどのような異常(更新、挿入、削除)を引き起こすか?
- 各正規形を定義する条件は何か、そしてそれぞれどのような冗長性を排除するか?
- 情報を失うことなくリレーションを分解するにはどうすればよいか?
- より高い正規形と引き換えに従属性保存を犠牲にしなければならないのはいつか?
Key concepts
- 関数従属性
- アームストロングの公理と閉包
- 候補キーと主属性
- 更新、挿入、削除の異常
- 第一、第二、第三正規形
- ボイス・コッド正規形
- 多値従属性と4NF
- 非損失結合分解
- 従属性保存
Key theories
- 関数従属性と閉包
- 関数従属性 X → Y は、X が Y を決定すると主張します。アームストロングの公理により、従属性の集合の閉包を計算でき、これはキーの発見と正規形のテストの基礎となります。
- 正規形
- 第一から第三正規形、およびボイス・コッド正規形は、冗長性を排除するために関数従属性に対して段階的に厳密な条件を課します。第四正規形はこれを多値従属性に拡張します。
- 非損失結合および従属性保存分解
- 分解は、非損失である(元のリレーションが部分を結合することで再構築できる)場合にのみ望ましく、理想的には従属性を保存する(すべての元の従属性が部分に適用できる)場合に望ましいとされます。これらの基準は、スキーマがどのように分割されるかを制約します。
Clinical relevance
正規化は、信頼性の高い情報システムを構築するための核となるスキルです。適切に正規化されたスキーマは、トランザクションアプリケーションにおけるデータの一貫性の欠如を防ぎ、メンテナンスを簡素化します。一方、実務家は、読み取り負荷の高い分析やレポート作成のために意図的に非正規化を行うこともあり、現実世界のデータベースエンジニアリングにおいてトレードオフが中心的な要素となります。
History
コッドは1970年代初頭に第一、第二、第三正規形を導入し、ボイスとともに、より厳密なボイス・コッド正規形を導入しました。ロナルド・ファギンは後に、多値従属性と結合従属性に基づいて第四および第五正規形を定義しました。これらの成果は、スキーマ設計を、従属性制約に基づいた理論へと変えました。
Debates
- 実務においてどこまで正規化すべきか
- 厳密な正規化は冗長性と異常を排除しますが、読み取り負荷の高いワークロードを遅くする多くの結合を必要とする場合があります。実務家は、パフォーマンスのために制御された非正規化が正当化される場合と、正規化が防ぐように設計されたまさにその不整合を招く場合について議論しています。
Key figures
- Edgar F. Codd
- Raymond F. Boyce
- Ronald Fagin
Related topics
Seminal works
- codd1972
- silberschatz2019
- garciamolina2008
Frequently asked questions
- 注意深く扱えば、冗長性はなぜ問題を引き起こすのですか?
- 同じ事実を複数の行に冗長に格納すると、異常が発生します。更新によって一部のコピーは変更されるが他は変更されない可能性があり(更新異常)、無関係なデータなしでは事実を記録できない可能性があり(挿入異常)、または行を削除すると保持したかった情報が失われる可能性があります(削除異常)。正規化は、これらを可能にする冗長性を排除します。
- BCNFと第三正規形の違いは何ですか?
- どちらも関数従属性による冗長性に対処しますが、BCNFの方が厳密です。BCNFは、すべての非自明な従属性の左側がスーパーキーであることを要求します。スキーマは3NFであってもBCNFではない場合があります。BCNFは常に非損失分解をもたらしますが、従属性を保存しない場合があり、そのため3NFが保持されることがあります。