こんにちは!階層型データベース(DBMS)の世界へようこそ。
「階層型DBMSって、リレーショナルデータベース(SQLを使うやつですね)と違って難しそう……」
そんなふうに身構えていませんか? 大丈夫、安心してくださいね。
実は、階層型DBMSの考え方は私たちが普段使っている「パソコンのフォルダ分け」や「会社の組織図」とまったく同じなんです。仕組みさえ掴んでしまえば、拍子抜けするほどシンプルで美しい世界なんですよ。
今回は、階層型データベースの操作(DML)においてすべての出発点となる超・超・重要コマンド「GET UNIQUE(ゲット・ユニーク / 通称 GU)」について、ゼロから優しく紐解いていきます。
ここをクリアすれば、階層型DBMSの基本操作はバッチリマスターできますよ! 一緒に楽しく学んでいきましょう。
—
1. まずはイメージから! 階層型データの世界
具体的なコマンドを見る前に、階層型DBMSがデータをどう持っているかをイメージしてみましょう。
階層型DBMSは、一本の大きな木(ツリー)を逆さにしたような構造をしています。一番上にある親玉を「ルート(根)」、その下にぶら下がるデータを「子(セグメント)」と呼びます。
例えば、「ネットショッピングの顧客管理」を考えてみてください。
【お客様(ルート)】 ← ここが一番上!
│
├──【注文情報(子)】
│ │
│ └──【注文明細(孫)】
│
└──【配送先住所(子)】
フォルダの中にファイルが階層状に入っているイメージですね。
この構造を頭に置いた上で、本日の主役「GU」を登場させましょう!
—
2. 「GET UNIQUE (GU)」とは? ピンポイント指名検索!
`GET UNIQUE`、略して `GU`。
英語の意味をそのまま訳すと「ユニークな(特定の)1件を取得する」ですよね。
その名の通り、GUは「木構造のてっぺん(ルート)からスタートして、指定した条件にピタッと一致する『特定のデータ』を直接ズバッと一本釣りするコマンド」です。
身近な例えでいうと……「図書館の蔵書カード」
図書館で「村上春樹の『ノルウェイの森』」を探したいとき、入口の検索端末に本の番号やタイトルを打ち込んで、目的の本が置いてある棚へ一直線に向かいますよね?
「1階の端っこの本から順番に1冊ずつチェックする」なんて気の遠くなることはしないはずです。
この「キー(本の番号や名前)を指定して、最初から目的の場所にワープする操作」こそが、階層型DBMSにおける `GU` なんです。
—
3. 実際のコードイメージを見てみよう!
階層型DBMSの代表格である「IMS(DL/I)」などの世界では、DBMSに対して「呼び出し(Call)」を行うことでデータを操作します。
初心者の方にも分かりやすいように、プログラミング言語(COBOLなどの雰囲気を持たせた疑似コード)で見てみましょう。
シナリオ:会員番号「C10001」の佐藤さんの「注文履歴(注文番号:O-999)」を一発で取得したい!
—————————————————————-
- 1. 探したい条件(SSA: 検索条件の指定)を用意する
—————————————————————-
- 「会員(ルート)」のキーが ‘C10001’
- かつ その下の「注文(子)」のキーが ‘O-999’ であるものを指定
MOVE ‘CUSTOMER(CUSTID = “C10001”)’ TO COND-ROOT.
MOVE ‘ORDER (ORDID = “O-999” )’ TO COND-CHILD.
—————————————————————-
- 2. データベースへ命令を投げる(GUコマンドの発行)
—————————————————————-
CALL ‘CBLTDLI’ USING
GU-FUNCTION > 「GU(直接検索して!)」という命令
MY-DB-PCB > どのデータベースを使うかの指定
DATA-BUFFER > 取得したデータを受け取る場所
COND-ROOT > 親(会員)の検索条件
COND-CHILD. > 子(注文)の検索条件
—————————————————————-
- 3. 結果の確認(ステータスコードをチェック)
—————————————————————-
IF STATUS-CODE = ‘ ‘ THEN
DISPLAY “データが見つかりました!”
DISPLAY “会員ID: ” CUST-ID
DISPLAY “注文ID: ” ORDER-ID
DISPLAY “注文金額: ” ORDER-TOTAL
ELSE IF STATUS-CODE = ‘GE’ THEN
DISPLAY “指定されたデータは見つかりませんでした(Not Found)”
ELSE
DISPLAY “エラーが発生しました: ” STATUS-CODE
END-IF.
実行結果のイメージ
データが見つかりました!
会員ID: C10001
注文ID: O-999
注文金額: ¥12,800
データベースは、上から下へとツリーをたどり、見事に「会員 C10001」の配下にある「注文 O-999」をピンポイントで引っ張り出してくれました!
—
4. 先輩が教える! GUの超重要ポイント2選
ここからは、実務で絶対に知っておいてほしい「GUの本質」を2つだけ伝授しますね。
① GUは「現在地(カレントポインタ)」をセットする
階層型DBMSには、「いまデータのどの位置を見ているか?」という見えない指差し(カレントポインタ)が存在します。
GUを実行すると、その「指定したレコード」に指差しがビシッと移動します。
これの何が嬉しいかというと、GUで目的の親データを見つけた後は、その親にぶら下がっている複数の子供たちを「次! 次! 次!」(※GN: GET NEXTという別のコマンド)と順番にスムーズに読み込めるようになるんです。
すべてのデータ探索の「旅のスタート地点」を決めるのがGUの役目なんですね。
② どんな深い場所にあっても、必ず「ルート(てっぺん)」から探す
GUは常にツリーの最上位(ルート)から下に向かって検索を行います。
いま自分がどこにいようと関係ありません。「GU」と叫べば、いったんツリーのてっぺんに戻り、指定された条件に向かって最短ルートでまっすぐ潜っていきます。迷子にならない安心設計ですね。
—
まとめ:GUをマスターすれば怖くない!
最後に、今回のポイントをサクッとおさらいしましょう。
- `GET UNIQUE (GU)` は、キーを指定して目的のデータを一発で探す「ピンポイント検索」
- 図書館の端末で本を検索して、目的の棚へ直接向かうような操作
- データの現在位置(ポインタ)を目的の場所にセットする「探索のスタート地点」になる
どうでしょう? 難しそうに見えた階層型DBMSも、仕組みがわかるととても理にかなっていて、愛着が湧いてきませんか?
GUで「目的の場所」にたどり着く方法がわかれば、次はそこからデータを順番に取得していく「GET NEXT (GN)」の世界が待っています。そこまで理解できれば、もう階層型DBMSの基本ナビゲーションは完璧です。
一歩一歩、確実に進んでいきましょうね。応援しています!
コメント