← メディア一覧

第一から第三正規化_データ整理の極意

15分12秒 | DB設計FE

基本情報技術者試験の頻出テーマを解説した音声コンテンツです。

トランスクリプト(字幕テキスト)

こんにちは、ディープダイブへようこそ。今回はですね、あなたが共有してくれた資料を元に、 データベース設計の「正規化」という考え方について、その核心を一緒に探っていきたいと思います。よろしくお願いします。 今手元にあるのが、データベースの基礎を学んだ人が次にぶつかる壁ありますよね。ええ、ありますね。 あの複雑なデータテーブルって、一体どうやって設計するんだっていう。はい、はい。その疑問に先輩と後輩が対話形式で答えていくというテキストです。 ええ、非常に実践的でつまずきやすいポイントがうまく押さえられているんですよね。正規化を単なるルールじゃなくて、 整理整頓の極意として捉えているのがまた面白いなと。まさに。そこで今回はですね、この資料を手がかりにして、 なぜデータの「お片付け」がビジネスにとって死活問題にまでなり得るのか、そしてその具体的な整理術とは何なのかを解き明かしていきましょう。 これってエンジニアだけの話じゃないはずですよね。おっしゃる通りです。これはもう情報をどう扱うかという普遍的な知恵の話ですからね。 では早速、その散らかった部屋の状態から見ていきましょうか。ええ、お願いします。資料では正規化を「整理術」と表現していますけど、 そもそもなんでデータって自然と散らかるんでしょうか。ああ、いい出発点ですね。意図的に散らかしてるわけじゃないですよね。 ええ、もちろんです。データが散らかる原因って、多くの場、現実世界の出来事をそのまま記録しようとするところにあるんです。そのまま? はい。だから善意から始まってるんですよ。善意からですか、面白いですね。資料に出てくる注文書の例がすごくわかりやすいです。 一枚の紙の注文書に商品名、単価、数量、それからお客様の名前、住所とか、そういう情報が全部まとめて書かれてますよね。 はい、ありますね。これをそのままデータベースの一つの巨大なテーブルに登録してしまう。そうそう、これが散らかった状態の始まりだと。 その通りです。見た目は一目瞭然で分かりやすい。でもこのとりあえず全部入れましたっていう状態が、後々、とんでもない問題を引き起こす時限爆弾になるんです。 時限爆弾。はい。問題は大きく二つあります。まず一つはデータの重複、つまり、まあ無駄ですね。無駄。 えと、例えば同じお客様が10回注文してくれたら、その度に同じ名前と住所が10回記録されるっていうことですか?ええ、そういうことです。 まあ、これだけなら、最近のストレージは安いし少しくらいと思うかもしれない。でも本当に恐ろしいのは二つ目の問題。矛盾のリスク。 専門用語で言うところの更新時の不整合です。矛盾のリスク。はい。先ほどの例で、そのお得意様が引っ越したとしましょう。 住所を変更するためにデータベースに記録されている10箇所全ての住所を一つ残らず正確に修正しなくちゃいけない。うわぁ、考えただけでも嫌ですね。 もし一つでも修正を忘れてしまったら。そこなんですよ。一つでも修正漏れがあれば、9個の新しい住所と1個の古い住所がデータベース内に混在することになる。 そうなると、システムはもうどっちが本当の住所なのか判断できないんです。なるほど。それって単にデータがぐちゃぐちゃなだけじゃなくて、 例えば新商品を発送したら古い住所に届いちゃったり、あとは売上レポートの顧客エリア分析が不正確になったり、 もうビジネス上の意思決定そのものが揺らいでしまう危険があるわけですね。まさに、これはもう単なるデータ管理のミスじゃないんです。 顧客の信頼を失って、無駄なコストを発生させ、経営判断を誤らせる重大なビジネスリスクなんですよ。 失われた荷物一つとっても、送料の損失、代替品を送るコスト、お客様対応にかかる人件費、 そして何よりもブランドイメージの毀損に繋がりますから。いや、深刻さがよく分かりました。その時限爆弾を解除する技術が、 つまり「正規化」なんですね。そういうことです。そしてその解除コード、つまり正規化の究極的な目的っていうのは、 資料で先輩が言ってるたった一つのシンプルな原則に集約されます。ほう。「一つの事実は一箇所だけに保存する」。これだけです。 「一つの事実は一箇所だけに」。なるほど。Aさんの住所っていう事実は、データベースの宇宙でただ一つだけの場所に存在するべきだと。 シンプルですけど、ものすごくパワフルな原則ですね。では、その理想を実現するために、具体的にどうやって整理していくのか、 資料にある3つのステップを追っていきましょう。はい、第一正規化から第三正規化まで、段階的に部屋を片付けていくイメージですね。 まずは第一正規化。これは比較的シンプルそうに見えますね。はい。これはもう整理整頓のもう基本中の基本です。 「一つのマス目には一つの情報だけを入れる」というルール。資料の例でいえば、注文商品のセルに、 「リンゴ、バナナ、オレンジ」みたいにカンマ区切りで全部書くのはNGということです。ああ、エクセルとかでよくやっちゃいますね。やっちゃいますよね。 そうじゃなくて、この注文でリンゴを3個、この注文でバナナを5個っていう風に、一行一行、情報をちゃんと分けて記録するんですね。 その通りです。まずはごちゃ混ぜになっているものを、一つ一つ独立したレコードに分解する。これが全ての始まりです。 分かりました。これでまあ、一つのセルに一つの値が入るようにはなりました。でもさっきの問題、 同じお客様の名前とか住所が何度も出てくるっていう重複はまだ解決してないですよね。素晴らしい、まさにその通りです。これを消していくのが次の段階ですか? ええ、そこに取り組むのが第二正規化です。ここからが本格的な整理になりますね。 資料には「主キーの一部だけで決まるデータを分ける」とあって、ちょっと難しく感じたんですけど。少し言葉が専門的ですよね。 もっと簡単なイメージで言うと、第二正規化はテーブルのテーマを明確にする作業なんですよ。テーブルのテーマ? ええ、例えば、私たちのテーブルのテーマが「どの注文でどの商品をいくつ頼んだか」っていう注文明細だとしましょう。はい、注文の明細。テーマは明確ですね。 ここに商品名とか商品の単価っていう情報が一緒に入ってると、あれ、これって商品の情報であって、注文明細そのものの情報じゃないなと気づくわけです。 あぁー。リンゴの単価って注文ごとじゃなくて、リンゴ自体に紐づく情報ですよね。確かに。注文番号がAでもBでもリンゴの単価は同じはずですもんね。 そうなんです。このように、テーブルのテーマに直接合わない情報、この例で言えば商品名や単価を、 それに相応しい「商品」っていうテーマのテーブルに引っ越してもらう。なるほど。これが第二正規化の考え方です。 注文明細テーブルには本当にそのテーマに必要な、どの商品を(商品コード)、いくつ買ったか(数量)だけを残すんです。 なるほど。テーマに合わないものは別の部屋へどうぞってことですね。だいぶスッキリしてきました。ええ。でもまだ顧客の名前とか住所は注文テーブルに残ったままですね。 鋭いですね。その最後の仕上げが第三正規化です。はい。第二正規化がテーブルの主役、つまり主キーとの関係性を見たのに対して、 第三正規化は主役以外の脇役同士の関係性に注目します。脇役同士の関係性ですか。ええ。今の注文テーブルに「顧客ID」「顧客名」「顧客の住所」が入っているとします。 この中で「顧客名」や「顧客の住所」っていう情報は、何によって決まりますか?それは、顧客IDが決まれば名前も住所も一つに決まりますね。 注文番号が何番であろうと関係ないです。まさにそこです。顧客名とか住所は、注文というテーマに直接関係してるわけじゃなくて、 「顧客」っていう別のテーマに属する情報ですよね。あぁ、そうか。第三正規化は、このように主キーではない項目、この場合は顧客IDですけど、 それに従属している情報を、元のテーブルから完全に独立させて「顧客テーブル」として外に追い出す作業なんです。 なるほど。これでついに、注文のテーブル、商品のテーブル、顧客のテーブルというように、 関連性の強いグループごとに情報がそれぞれの専門部屋に分けられたわけです。その通りです。見事に整理されました。 でも正直に言うと、一つのテーブルを3つにも4つにも分けるなんて、かえって管理が複雑になって面倒くさそうに聞こえますけど。 元の注文テーブルは、誰からの注文か分からなくなっちゃいませんか?本当にこのほうがいいんでしょうか。いい質問ですね。 そこがまさにこの設計の美しさであり、最も重要なポイントなんです。バラバラにしただけでは、ただの情報分解です。元の注文テーブルには、 「顧客ID」と「商品コード」だけを「連絡先」として残しておくんです。連絡先?ええ、このIDを鍵、つまり「キー」にして、 必要な時だけ「顧客テーブルさん、このIDの人の住所を教えてください」とか、「商品テーブルさん、このコードの商品の値段はいくらですか?」って聞きに行くわけです。 なるほど。こうすることで情報はそれぞれの専門部屋で一元管理されつつも、IDという鍵を通じて関係性はしっかりと保たれる。 これがデータベースリレーションの基本ですね。はぁ、そういうことでしたか。一見バラバラに見えて、裏ではちゃんとIDで繋がってるんですね。 そうなんです。これでようやく、この整理整頓がもたらす本当の価値が見えてきました。 その価値とは、資料の言葉を借りれば、「修正に強いシステムが生まれる」こと。修正に強い。先ほどの引っ越しの例を、この整理された世界でもう一度考えてみましょう。 以前は10箇所も直す必要があってミスが起きる可能性が高かった。しかし正規化された後ではどうでしょう。Aさんの住所という事実は、 この世にただ一つ、独立した顧客テーブルの中のAさんの行にしか存在しません。つまり、住所を変更するには?たった一行、その顧客テーブルの一行を修正するだけでいい。 その通り。え、たった一行でいいんですか?あれだけたくさんあった注文データの全部に、それが自動で反映されるなんて。 それは魔法みたいですね。ミスのしようがないじゃないですか。まさに魔法のように感じるかもしれませんが、これが論理的な設計がもたらす力なんです。 「一つの事実は一つに」という原則を守ったおかげで、更新の矛盾というリスクがもう構造的に完全に排除されたわけです。 これはすごい。単にスッキリしただけじゃなくて、システムの安全性とか信頼性が劇的に向上するんですね。そうなんです。 資料にある「皆さんの会社のエクセル名簿、同じ情報を何度も入力していませんか?」っていう一文が今すごく胸に刺さります。 部署ごとに顧客リストが乱立していて、同じ会社の住所が微妙に違っていたり、まさにそのエクセルの状態こそ、正規化されていないデータベースの典型です。なるほど。 以前、あるECサイトの案件で、本当にそうしたデータベースを引き継いだことがあるんです。お客様がサイト上で住所変更を申請したのに、 発送チームは四半期ごとに更新される古いエクセルリストを見ていて。うわぁ。結果はご想像の通りです。 あの時のトラブル対応と信用回復にかかったコストを思えば、最初の設計で正規化を徹底する手間など本当に何でもないですよ。生々しいお話ですね。 そう考えると、この「正規化」っていう考え方は、データベースを設計する専門家だけじゃなくて、 普段の業務でデータを扱うすべての人にとって知っておくべき必須の知識と言えそうです。おっしゃる通りです。そしてこの考え方を身につけるコツとして、 資料にある「関連する項目ごとにグループ分けして親子関係を整理する」という視点が非常に役立ちます。親子関係、ですか。ええ。 例えば「顧客」が親で、その顧客が行った多数の「注文」が子、という関係です。あるいは「商品マスター」という親がいて、その商品が含まれる「注文明細」が子。 何が主で何が従なのか、何と何が直接結びついているのか、このデータの、まあ、血縁関係を見極めることが整理整頓の第一歩になります。 闇雲に分けるんじゃなくて、データの関係性っていう筋を見つけて、それに沿って整理していくんですね。まさに。そしてその価値をチームとか上司に伝える上で、 資料が提案しているもう一つの工夫も非常に有効です。正規化前(ぐちゃぐちゃ)と正規化後(スッキリ)のビフォーアフターの図を並べて見せる。あぁ、なるほど。 情報が重複だらけでどこを直せばいいか分からない一枚の巨大な表と、関連性で美しく分けられて修正箇所が一目瞭然な複数の小さな表。 この視覚的な変化がどんな言葉よりも雄弁に正規化の価値を物語ってくれます。百聞は一見にしかず、ですね。 ビフォーの表を見せながら、「もしこのお客様が引っ越したら、ここもここもここも直さないといけないんですよ」って示唆すれば、誰でも問題の深刻さが理解できそうです。 さて、それでは今回の話をまとめてみましょうか。お願いします。今回、あなたが共有してくれた資料から学んだのは、 正規化が単なるお片付けではなく、データの重複をなくして、更新時の矛盾という致命的なリスクを防ぐためのビジネスの土台を支える設計思想である、ということでした。 ええ、まさに土台ですね。その基本原則は、「一つの事実は一箇所に」という驚くほどシンプルな言葉に集約されていました。 そして第一、第二、第三正規化というステップを通じてデータの関係性を見極め、関連性の強いグループに分けていく。 一見複雑になるように見えて、実はそれぞれがIDという鍵でしっかり結ばれたメンテナンスが容易で安全なシステムを築くための非常に論理的な手法なんですね。 完璧な要約です。その通りです。これで皆さんにとってもデータベースの整理整頓マスターへの道筋がかなりはっきりと見えてきたのではないでしょうか。 ええ、しかし最後にもう一つだけ皆さんの思考をさらに先へ進めるための問いを投げかけて、この話を終わりにしたいと思います。お、何でしょう。面白そうです。 今回はデータベース設計で最も基本的かつ重要な第三正規化までを見てきました。これでほとんどの日常的なデータは美しく整理できます。 しかし、ここで一つの疑問が浮かびます。この整理術にはさらに上の段階、第四正規化、第五正規化、さらには第六正規化といったステップは存在するのでしょうか。ほう。 そしてもし存在するとしたら、一体どのような、私たちの想像を超えるほど複雑なデータの関係性がそこまでの徹底的な整理整頓を必要とするのでしょうか。 少し未来のデータを想像してみるのも面白いかもしれませんね。

このコンテンツは Web society で視聴・学習できます。