育児本を購入しに行った書店で見つけた「理論から学ぶデータベース実践入門 – リレーショナルモデルによる効率的なSQL」という本の読書logの続きです!
私の備忘録として、勉強になった内容と個人的な感想をまとめています。
あくまでも備忘録なので、詳しく勉強したい方は実際に書籍を手に取ってみてください🙇♀️
※イタリック体の文字は私の感想です。
第3章 正規化理論(その1) – 関数従属性 –
- 正規化理論は、重複を排除するうえで役に立つ。
→「正規化 = 重複の排除」と捉えることで、各正規系への正規化手順とその意図がより明確になりました。
- DB設計において重要なのは、ボイスコッド正規系と第5正規系である。
→基本的には第3正規形までを目指すことが一般的と言われていきた(と認識している)ので、興味深い。今後の解説に期待。
- 各正規形の具体的なリレーションは、書籍内で例示されている。
→この例示のおかげで、非常に分かりやすい内容になっていると感じます!
第4章 正規化理論(その2) – 結合従属性 –
- 第4正規化以降が必要になるのは、非キー属性が存在しない、かつ、候補キーが複合キーである場合である。そのため、少なくとも以下の1つを満たすボイスコッド正規形は、第5正規形を満たすことになる。
- 非キー属性が存在する
- 候補キーが単一キーである
→第4正規化以降も、業務内で自然にやっている気がします。改めて学ぶことで理論が強化されるので、より自信を持ってDB設計にあたれますね。
→サロゲートキーについては以下を参照。よく、〇〇IDとか採番して主キーにするやつですね。
- ボイスコッド正規形と第5正規形を特に重視している背景は以下である。
- ボイスコッド正規化まで行われているリレーションは、上記の2条件をみたしていれば自動的に第5正規化を満たす。
- 無駄な結合を防ぐために第6正規形にはしない。
→第4章での期待が解消されました!また、書籍にも記載されている通り、無駄な結合が増えないようにするため、何でもかんでも最大限の正規化を目指すのではなく、各々の状況に応じて最適な形を目指していきたいです。
第5章 リレーションの直交性
- 直交化とは、DB全体から重複を除去することである。正規化が1つのリレーション内の重複を除去することに対して、直交化は複数のリレーション間に発生する重複を除去する点が異なる。
→直交性に関する理論を学ぶことがなかったので、非常に勉強になりました!
- 各リレーションを第6正規化まで行い、リレーションのタプルの重複有無(もしくは今後重複する可能性の有無)を確認することで、直行しているか否かが判断できる。
→安易にカラムを追加することが重なると、直交性が発生しそうな予感。。。
- リレーション直交化のための戦略として、正規化、属性の名前の統一、アプリケーションとの生合成、などを考慮する。
→現在携わっているシステムで直面している内容です。一つのカラムに異なる意味を持つ値が格納されることがあったり、アプリケーション側とDB側で名前がずれていたり、、、
ここまでの感想
各正規形や直交化に対する例が載っているので非常に分かりやすいですが、本文と表が離れている箇所は改善してほしいと思いました。
第1正規形からボイスコッド正規形までは、データベーススペシャリスト試験の時(まだ、カモネギが意欲と野望に満ちていた頃)に一生懸命勉強したことを思い出しました。
そして、試験には第3正規形までしか出題されないと言われていたが、第4正規形が出題されて戸惑いました笑。
実務では、テーブルが増え過ぎてしまうことで逆に管理しづらくなることも考えて、あえて正規化しないこともあるので悩ましいですが、基本的には正規化した方が良さそうに感じました。
現在はDB設計の担当ではありませんが、今後レビューメンバーには含まれることがあれば、正規化と直交化の観点からレビューします。
以上