こんにちは!今日のテーマは、少しレトロでありながら、データベースの「超・基本」がぎっしり詰まった「階層型DBMS(データベース管理システム)」です。
「階層型って言われても、なんだか難しそう……」
そんなふうに身構えていませんか? 大丈夫です。ここをクリアすれば、データが裏側でどうやって手をつないでいるのか、その本質が手に取るように分かりますよ。
今日は、階層型データベースの心臓部である「ポインタ(データのしるし)」の種類と使い分けについて、身近な例えを交えながら優しく紐解いていきましょう。
—
1. そもそも階層型DBMSってなに?(会社組織で例えてみよう)
現代の主流は「リレーショナルDBMS(表形式)」ですが、その昔、そして今でも超高速性が求められる世界で使われているのが「階層型DBMS」です。
イメージしやすいように、あなたの会社を思い浮かべてみてください。
- 社長(一番上の親)の下に、
- 部長たち(子)がいて、
- さらにその下に課長たち(孫)がぶら下がっている。
まるで「組織図」や「家族の家系図」のように、データがピラミッド状につながっているのが階層型DBMSの特徴です。親から子へは一本道で迷わず行けますが、横のつながり(例えば、別部署の同僚同士)に行くのは少し工夫がいります。
この「上下のつながり」をコンピュータの世界で実現しているのが、今回主役となる「ポインタ(矢印)」なんです。
—
2. 二大ポインタの登場:「直接ポインタ」と「シンボリックポインタ」
階層型データベースの中で、親から子へジャンプするための道しるべには、大きく分けて2種類あります。それが「直接ポインタ」と「シンボリックポインタ」です。
エンジニア界隈ではよく議論になるこの2つ、日常の「住所」と「お使いメモ」に例えてみると、一発で理解できますよ。
① 直接ポインタ(Direct Pointer):住所そのものが書いてある!
- 例え: 「東京都港区〇〇 1-2-3 の〇〇さんち」と、地図上の正確な緯度経度や番地が直接メモされている状態。
- 特徴:
- 迷う余地がありません。その場所に行けば一発でデータにたどり着きます。
- スピードは爆速です。コンピュータにとってこれほど楽なことはありません。
- ただし、もしその家(データ)が引っ越して別の場所に移ってしまうと、メモの住所が「ウソ」になってしまい、道に迷ってしまいます。
② シンボリックポインタ(Symbolic Pointer):名前や背番号で探す!
- 例え: 「営業部の、鈴木さんという名前の人」と、目印(キー)だけが書いてある状態。
- 特徴:
- 探すときは、「営業部の鈴木さん、どこですかー?」と表札を見て回る(これを探索と呼びます)手間がかかります。
- 直接ポインタに比べると、スピードは少し落ちます。
- でも、鈴木さんが会社の中で引っ越しをして別の机(別の物理的な場所)に移ったとしても、「鈴木さん」という名前(キー) さえ変わっていなければ、迷わず見つけ出すことができます。柔軟性が高いんですね。
—
3. DDL(スキーマ定義)のイメージを見てみよう
ここで、頭の中を少しだけエンジニアモードに切り替えて、データを定義する言語(DDL:データ定義言語)のイメージを覗いてみましょう。
階層型の世界では、「どのデータの下に、どのデータがぶら下がるか」をあらかじめ設計図(スキーマ)に書きます。
— 【階層型スキーマ定義のイメージ】
— 社長(根っこ)の下に、直接ポインタで社員がぶら下がっている例
SCHEMA CompanyDatabase;
RECORD 部署 (
FIELD 部署コード CHAR(5),
FIELD 部署名 VARCHAR(30)
);
RECORD 社員 (
FIELD 社員番号 CHAR(8),
FIELD 氏名 VARCHAR(50),
— 親である「部署」レコードへの直接ポインタを保持
POINTER DIRECT TO 部署
);
(※上記は概念をわかりやすく伝えるための疑似コードです)
このように、「この子は、どの親のポインタを持っているか」をコードで明示することで、ピラミッドの構造がカチッと固定されます。
—
4. どっちを使うべき? シチュエーション別の使い分け
「じゃあ、どっちのポインタが優れているの?」という疑問がわきますよね。これは優劣ではなく、「スピードを取るか、柔軟性を取るか」のトレードオフ(一長一短)です。
先輩エンジニアからのアドバイスとして、使い分けの黄金ルールを伝授しましょう。
💡 直接ポインタを使うべきシチュエーション
- データがあまり引っ越し(移動・更新)しない場合。
- 銀行の口座データと毎日の取引履歴など、「絶対的なスピード」が命である場合。
- 裏側の物理的なストレージ配置がガチッと固まっているシステム。
💡 シンボリックポインタを使うべきシチュエーション
- データの追加や引っ越しがひんぱんに発生する場合。
- 「名前」や「ID」といった論理的な結びつきを重視し、物理的な配置の変更にシステムを強く(頑健に)させたい場合。
—
おわりに
いかがでしたか?
「直接ポインタ」は、目的地への緯度経度(物理アドレス)。
「シンボリックポインタ」は、目的地への表札の名前(論理キー)。
この違いさえ押さえておけば、階層型DBMSのデータ構造の核心はもうあなたのものです。「なぜこのポインタを選ぶのか」という設計の意図が語れるようになると、データベースを見る目がガラリと変わりますよ。
ここをクリアしたあなたなら、どんな古いデータベースのアーキテクチャ資料を開いても、スイスイ読み解けるはずです。
次回のステップも、この調子で楽しくマスターしていきましょう!
コメント