幽霊データは許さない!参照整合性制約
6分04秒 | DB基礎FE
基本情報技術者試験の頻出テーマを解説した動画コンテンツです。
トランスクリプト(字幕テキスト)
データベースをクリーンで、そして論理的に保つために絶対に必要な、たった1つのルールについてお話ししていこうと思います。 このルールを知らないと、気づかないうちに皆さんのデータベースが信頼性を失って、データの中に幽霊がさまよい始めてしまうかもしれないんです。 さあ、このちょっとミステリアスなテーマ、一緒に解き明かしていきましょう。 さて、じゃあ具体的に見ていきましょうか。ここに社員名簿と部署名簿っていう2つのデータテーブルがあると想像してみてください。 社員名簿には、その社員がどの部署にいるかを示す部署コードが記録されてます。とってもシンプル、ですよね。でもここにこそ落とし穴があるんですよ。 さあ、ここで皆さんにちょっと質問です。もし誰かが、うっかり部署名簿には存在しない「999番」なんていう部署コードを ある社員のデータとして登録しようとしたら、一体何が起きると思いますか? まさにその瞬間、その社員は「幽霊社員」になっちゃうんです。データ上は999番部署にいることになってるのに、その部署の実体は どこにも存在しない。これって、もうデータの重大な矛盾ですよね。システム全体に予期せぬエラーを引き起こす、いわば時限爆弾みたいなものなんです。 でも、大丈夫です。安心してください。こういうデータの幽霊が生まれるのを、ちゃんと未然に防いでくれてるデータベースの頼もしい門番がいるんです。 それこそが、今回の主役「参照整合性」っていう、まあ言ってみれば鉄の掟なんですね。 正式には参照整合性制約って言います。なんかね、難しく聞こえるかもしれないんですけど、ルールはびっくりするほどシンプルなんです。 社員名簿にある部署コード。これは別のテーブルを参照するための鍵なので、外部キーって呼びます。 この外部キーの値は、必ず参照先である部署名簿に存在する部署コード、つまりそのテーブルの主人公である主キーのリストの中に、ちゃんと無きゃダメだよっていう、ただそれだけのルールなんです。 この制約って、まるでデータベースの入り口に立ってる用心棒みたいなもんですよね。存在しない999番の部署コードを持ったデータがやってきたら 「おい待ち、な。リストにない番号だぜ。そんな部署はないよ」って、きっぱりと登録を拒否してくれるんです。これで幽霊は生まれないってわけです。 さて、じゃあ今度は、逆のパターンを考えてみましょうか。データを追加するときだけじゃなくて、実はデータを削除するときにも、この門番、大活躍してくれるんですよ。 今度はこういう状況を考えてみてください。まだ何人もの社員が所属している営業部を、部署名簿から削除しようとしたら、一体どうなるべきだと思いますか? もし部署をそのまま削除できてしまったら、今度は営業部にいた社員たちが、行き場をなくした迷子のデータになっちゃいますよね。参照先を失って、またしても幽霊社員が生まれてしまう。これもまた、データの整合性をぶっ壊す行為なんです。 そこでこの問題を解決する方法が主に2つあるんですね。1つは、レストリクト、つまり制限です。 これは子供である社員データが1人でも残っている限り、親である部署データの削除を許さないっていう最も安全な方法。 もう1つはカスケード。これは親である部署を削除すると、そこに関連付けられている子、つまり社員データも一緒に自動的に全部削除しちゃうっていう 非常に強力な設定です。便利なんですけど、意図しない大量データ削除につながる可能性もあって、本当に注意して使わないともう大惨事を引き起こしかねない、ちょっと怖い技でもあります。 さて、ここまで見てきた話の、まあ本質ですよね。それは、データの親子関係っていう考え方に集約されるんです。ここを理解するのが、参照整合性をマスターする鍵なんですよ。 ここで重要な用語をもう一回整理しておきましょうか。まず参照整合性。これは、この親への参照が常に正しいことを保証するルールでした。 次に親子関係。これは、参照される側の部署テーブルが親、参照する側の社員テーブルが子という関係性のこと。そしてカスケードは、親を削除したときに子も連動して削除される、あの強力な設定のことでしたね。 つまり、ここでの超重要なポイントは、この親子間の測れない絆なんですよ。まず、子は親なしでは存在できません。社員は必ず存在する部署に所属しなければいけない。 そして、親は子に依存されている限り、勝手にいなくなることはできません。社員が所属している間は、部署は削除できない。この2つのシンプルなルールがデータの秩序を守ってるんです。 では最後に、この理論が実際の現場でどういう風に生きてくるのか。具体的なアドバイスをちょっと見ていきましょう。 いやーこれはもう実務あるあるの代表格なんですけど、開発中にテスト用のデータを手作業で作ってて、うっかり親テーブルにデータを入れるのを忘れて この参照整合性制約にはじかれてエラーが出て、「わ、またやった」ってなることが、本当によくありますよね。でもそれって、門番がサボらずにちゃんと仕事をしてくれてる証拠なんですよ。 そこでプロからのヒントです。データベースの設計書とかには、どのテーブルが親でどれが子なのか 矢印なんかを使って関係を図で示しておきましょう。こうすることで、チームの誰もがパッと見ただけで親子関係を理解できて、さっきみたいなうっかりミスをぐっと減らせるわけです。 さて、今回は参照整合性について深く見てきましたけどどうでしたか?このルールは普段は目に見えないところでデータの秩序と信頼性を守ってくれる、まさに縁の下の力持ちです。 最後に、皆さんに1つ考えてみてほしいんです。あなたの身の回りにあるデータ、あるいは今あなたが管理しているシステムに、まだ誰にも気づかれていないどんな幽霊が隠れているかもしれませんか?
このコンテンツは Web society で視聴・学習できます。