こんにちは!データベースの世界へようこそ。
今日は、少しレトロでありながら、現代のデータベースの基礎となった「階層型DBMS」の世界を一緒に探検していきましょう。
「階層型って言われても、なんだか難しそう……」
そんな風に思っていませんか?大丈夫です。ここをクリアすれば、階層型DBMSの基本はバッチリマスターできますよ!
今回は、その中でも特に大切な「新しいデータをどうやって正しい場所に入れるか」というお話です。専門用語はできるだけ使わずに、身近な例えで優しく解き明かしていきますね。
—
1. 階層型DBMSって、なにに例えられる?
まず、階層型DBMSのイメージをつかみましょう。
一番分かりやすいのは、会社の「組織図」や、パソコンの「フォルダ(ディレクトリ)構造」です。
- トップ(親): 社長
- ミドル(子): 部長(社長の部下)
- ボトム(孫): 係長(部長の部下)
階層型データベースでは、データがこのように「親子関係のツリー構造」でガッチリと結びつけられています。親がいないと子は存在できない、そんな厳格でピラミッドのような世界です。
—
2. 新しいデータを追加する魔法の呪文「ISRT」
さて、このピラミッド構造の中に、新しい社員(データ)が入社してきたとします。
「総務部の新しい係長さんを、このデータベースに追加して!」
このとき、プログラムからデータベースに対して「ISRT(Insert / 挿入)呼び出し」という命令を出します。これが今回の主役です。
日常のたとえで言うと、「会社の組織図の、ちゃんと言い伝えられた正しい場所に、新しい名前の札をガチャンと差し込む作業」ですね。
—
3. 挿入位置はどうやって決まる?(ルールの正体)
「じゃあ、どこに差し込んでもいいの?」というと、それは大違い。階層型DBMSには、厳格なルールがあります。
① 親がいないと子は入れない
総務部の係長を追加したいなら、その上に「総務部(親)」がすでに存在していなければなりません。親のいない子機は絶対に作れない、それが階層型の鉄則です。
② 同じ階層の中での「順番」が決まっている
例えば、総務部にすでに「鈴木さん」という係長がいたとします。そこに新しく「佐藤さん」が入ってきたとき、どこに差し込むでしょうか?
階層型DBMSでは、データの定義(スキーマ)の時点で、並び順のルールがあらかじめ決められています。
- 「名前のアルファベット順(あいうえお順)」に並べる
- 「社員番号の若い順」に並べる
ISRT呼び出しを行うと、DBMSが裏側で自動的にそのルールを計算し、「ここに差し込むのが正しい!」という隙間に、ピタッと新しいデータを滑り込ませてくれるのです。人間が手動で並び替える必要はありません。
—
4. 論理関係に伴う「自動挿入」のミステリー
ここからが、少し知的で面白いところです。
階層型DBMSには、物理的な親子のほかに、離れた場所にあるデータ同士を繋ぐ「論理関係(ポインタのようなもの)」という隠し通路が存在することがあります。
これを例えるなら、「本社の人事ファイル(メインの階層)に名前を書いたら、自動的に、各プロジェクトチームの参加者名簿(別の場所)にも名前がコピーされて挟まる」ような仕組みです。
ISRT呼び出しでメインのデータ(親)を挿入したとき、この「論理関係」が設定されていると、DBMSが気を利かせて関連する別の場所へも自動的にデータを挿入(あるいはリンク)してくれます。
プログラマが「あっちの表にも、こっちの表にも書き込まなきゃ……」と何回も命令を出さなくても、親分であるISRTを1回呼ぶだけで、連鎖的に必要なデータが収まるべき場所に収まる。これが階層型DBMSの隠された凄技なんです。
—
5. 実装イメージをのぞいてみず
雰囲気を掴んでもらうために、イメージ用の疑似コード(プログラムの書き方)を見てみましょう。
// 1. 挿入したい新しいデータの準備
MOVE “佐藤 係長” TO Employee-Name.
MOVE “102” TO Employee-ID.
// 2. どこに挿入するかの目印(パス)を指定
// 「総務部」という親フォルダの下を指定する
MOVE “COMPANY.SALES-DEPT.GENERAL-AFFAIRS” TO Target-Path.
// 3. ISRT呼び出しの実行!
// これだけで、DBMSが自動的に正しい位置を計算して差し込んでくれます
CALL “CBLTDLI” USING ISRT, Database-Name, New-Segment-Area, Target-Path.
- 【エンジニアのコメント】
- “CBLTDLI” はメインフレーム等で使われる有名な呼び出しインターフェースです。
- ISRTを指定して呼び出すことで、DBMSがツリー構造の整合性を保ったまま
- 安全にデータを差し込んでくれます。
このように、私たちは「どこに(Path)」を入れて「どんなデータか(Segment)」をDBMSに伝えるだけで、あとの面倒な並び替えやツリーの維持はすべてDBMSが裏で完璧にこなしてくれます。
—
おわりに
いかがでしたでしょうか?
「ISRT(Insert)呼び出し」は、ただ単にデータを放り込むだけの命令ではありません。
1. 親の存在を確認し
2. 決められた並び順のルールに従って正しい隙間を見つけ出し
3. 必要があれば関連する場所へも自動で手を回す
そんな、とても几帳面で頼りになるデータベースの「整理整頓術」そのものです。
この基礎さえ押さえておけば、どんなに複雑な階層構造に出会っても、「あ、今はこのツリーのここに新しい枝を生やしているんだな」と頭の中でスッとイメージできるようになります。
ここをクリアしたあなたなら、もう階層型DBMSの基本はバッチリマスターできていますよ!
次のステップも、この調子で楽しく進んでいきましょう。
コメント