魔王の憂鬱 -12ページ目

魔王の憂鬱

情報通信っぽいことを、分かりやすく述べているつもりです。

最後の最後の日にしっかりとした雪が降り、

目覚めて外を見たら一面真っ白でテンションが上がりました。


やっぱ雪はいいですね。寒いけど。

昨晩ストーブを出しておいてよかった。


本来の日程より一日早い更新ですが、

ちょうどよい区切りですので、今日更新します。



おぼつかないながらも、とりあえず突っ走ってまいりましたこのブログ

早いもので、半年(くらい?)が経過しました。


コメントは非搭載ですが、こんな感じでいいのか?と考えてしまいます。

しかし、先日、いい事がありました。



このブログの左側に「読者になる」ボタンがあるかと思うのですが、

先日、初めて読者設定をしていただきました。


どんな方なのか気になって拝見してみたのですが、

『基本情報技術者試験』に関する内容が書かれておりました。

試験の合格を目指す方に大変役に立つかと思われます。


うぉ、こんなマジメなページを作成している方が読者に!

と思うと、この半年の内容も無駄ではなかったと嬉しくなります。



ところで、

『今年もあと1日。やり残したことはありませんか?』

とはよく聞かれます。切り口を変えてみましょうか。

『来年、何をやりますか?』



まずは目標をしっかり持って、その目標を達成するには

何ができればいいのか、自分に何ができるのかを考え、

時間を無駄に使わないことが大切らしいです。


私はこれが出来ていなくて、度々怒られます。




とりあえず、書くだけ書いて置きっぱなしの年賀状を

今年中にポストに出す事が当面の目標です。

オチもついたので、また来年。

(朝の5時前まで起きてサンタを張ってたから来なかったのかなぁ・・)



あ・・、何でもないです。

続きまして、関係型データベースのお話です。


今回は2つの記事を連続で書いておりますので、

「その1:階層型データベース」をお忘れなくチェックして下さいね。



関係型データベースはおなじみですので、細かい説明はいらないですよね?

でも、ちょっとした例だけ載せておきます。


学校 住所 校長先生
A学校 A県B市・・ ○川×夫
B学校 B県C市・・ △山□子

なんとも適当な例で申し訳ないですが;

このように、各列をデータ、各行をレコードとした表の形式で管理されます。


学校・クラス・生徒など、階層型データベースでいう階層ごとに表を作成すれば

データの管理がしやすいのではないでしょうか?

どのように表を作り、どのデータを持たせるのかという設計次第ですけどね。



さて、前回の最後にちょっとお話しましたが、

階層型データベースの各階層のデータに「キー」を設定して、

階層毎のポインタを切り離して考えると、関係型と同じ構造になってしまいます。


つまり、構造的には、階層型も関係型も違いはないのです。



ではなぜ、関係型データベースが主流となっているのでしょうか?

関係型には何かしらのメリットがあるハズのですが・・メリットって何でしょう?


シンキングターイム





・・





・・・





・・・・





はい、終了。


大きな特徴としまして、

関係型データベースでは「SQL」が使えるのです。


SQLを使うことの利点は、

複数の表を結合してデータを取得できる点にあります。


例えば、ある生徒の学校やクラスを含めたデータを取得したいとき、

「学校」「クラス」「生徒」の各表を結合して、



学校 クラス 生徒
A学校 1年1組 A君
A学校 1年1組 B君

このように1つの表として管理することができるのです。

SQLを用いて、このような操作が行えるのです。



では、次の質問。

階層型でも、学校やクラスのデータを1つのレコードに入れてしまえば、

同じ構造で管理することになりませんか?

「表を結合させることができる」利点はなんでしょうか?


シンキング・・もういいか。



ズバリいいますと、

データの1元管理が楽にできる可能性があるという点にあります。

(1元管理 : 何らかの情報やモノを一箇所で管理すること)


可能性という表現を用いたのは、

あくまで論理的な構造、設計次第によるからです。



ちょっと例を挙げてみましょうか。

ある製品・・野菜としましょうかね。野菜の、仕入れの単価と販売の単価は異なりますよね。

異なる2つの単価を持ちますが、同じ野菜のデータではあります。


野菜のレコードと単価のレコードを分けた場合、

階層型データベースでは、まず野菜のデータを取得してから、

欲しい方の単価のデータを取得する必要があります。

関係型データベースでは、SQLで野菜と欲しい方の単価の表を結合すれば、

一括でデータを確認する事ができます。


ただ、野菜のレコードに両方の単価のデータを含めるように設計した場合は、

階層型データベースと関係型データベースでは同じように機能します。



(↑ちょっと難しいかもしれません。よく読んで、考えてみてください。)

平たく言ってしまうと・・


データの設計によらず、関係型データベースはSQLを用いて1箇所で管理できる点にあります。

階層型データベースでは、この限りではありません。

ということで、管理の点から関係型データベースが主流となったのです。



論理的な構造の面でなく、物理的な現実の面で説明します。



管理はともかく、単純な検索の繰り返しによる階層型データベースは探索が早く、

処理のスピードや信頼性が求められるメインフレームでは、現在でも用いられております。


それとは別に、

メインフレームが使われていた当初は、関係型データベースの処理そのものに

機械の性能が追いついていないという実態がありました。


これらの点から、初めは階層型データベースが主流となっていたのです。

コンピュータの性能が向上し、関係型データベースの処理が可能となり、

設計によらない管理のしやすさから、関係型データベースへの流れとなったのです。



・・とまぁ、こんな感じかと思われます。



これらの事をいくつものデータベース関連のウェブサイトを調べて勉強したのですが、

なんでかなぁ、データベース関連のサイトの誤字・脱字率の高さは酷かった!w

今回のブログの内容にも誤字・脱字があったのなら、何かの呪いだと思います。

あー寒い。


いい子でなかった私の元へはサンタさんは来ませんでしたが、

みなさんいかがお過ごしでしょうか。


2010年も終わりに近づいていますね。

2011年までに、やり残したことはありませんか?


あ、年賀状まだ書いてなかった・・



今回は、データベースのお話です。

タイトルだけ見て、



『あぁ簡単じゃん。階層型は木の構造で、関係型は表の構造のでしょ?』



と思われた方も少なくないとは思います。

じゃあ聞きます。



『で、構造が違うという以外に、何を知っていますか?』



現在、関係型データベースが主流となっており、

さらにオブジェクト指向データベースやらXMLやら、さらなる流れがあるそうです。


その辺はよく知りませんが(コラ!)、

そもそもナゼ階層型が使われなくなったのでしょうか?


これらを踏まえまして、まずは階層型について復習しましょう。



階層型データベースは、

データを「親子」の関係として管理します。


「親子」の関係とは、親と子が1対多である関係をいいます。


例えば・・

学校 : クラス → 1 : 多

クラス : 生徒 → 1 : 多

といったところです。


            【学校(住所・校長先生・・)】

            ↓              ↓

   【1年1組(担任・生徒数・・)】  【1年2組(担任・生徒数・・)】・・

   ↓              ↓

【A君(出席番号・性別・・)】【B君(出席番号・性別・・)】・・



学校のレコード(←データの集まりのこと)1つに対して、クラスのレコードは複数あります。

このとき、子を下側にした階層構造をとります。


データの探索は、一番親であるデータ、つまり「学校」より開始します。



はい、ここまでで『論理的』な説明をしました。

ここまでなら知っている方は多いでしょう。


確かに考え方としては、このような構造で管理されてはいますが、

で、具体的に、『物理的』に、コンピュータはどうやってデータを持ち、探索するのでしょうか?




シンキングターイム






・・








・・・







・・・・







はい、終了。


先ほどの図っぽいもので使われておりました、親子の間にある『↓』なのですが、

これを物理的なポインタで紐つけて管理しております。


コンピュータ内部では、自身のアドレス・子のアドレス・兄弟のアドレスを加えて1つのレコードとしています。


アドレス データ内容 子ポインタ 兄弟ポインタ
0 学校(住所・校長先生・・) 20 0
20 1年1組(担任・生徒数・・) 60 40
40 1年2組(担任・生徒数・・) 120 140
60 A君(出席番号・性別・・) 0 80
80 B君(出席番号・性別・・) 0 0

先ほどの例に、アドレスを追加すると、このようになります。



            0【学校(住所・校長先生・・)】

            ↓              ↓

   20【1年1組(担任・生徒数・・)】  40【1年2組(担任・生徒数・・)】・・

   ↓              ↓

60【A君(出席番号・性別・・)】80【B君(出席番号・性別・・)】・・



A君の場合、「0→20→60」と、アドレスを次々に参照しながら探索されるのです。



構造としては、ファイルのディレクトリ構造をイメージすると分かりやすいかもしれません。

「マイドキュメント」→「マイピクチャ」→「Sample Picture」→「花.jpg」 ・・みたいな。



コンピュータというものが使われ始めて間もない頃、

メインフレームといいます、今では企業の基幹業務に使われているような大型のコンピュータでは、

このような階層型で管理されていました。


階層型データベースは、アドレスやポインタなど、データの管理が面倒くさいのですが

後述します関係型データベースよりも探索速度は早いです。



・・ここまででも、結構書いてしまった;

ここから急展開します。



実は、こんな面倒くさい構造は、実際の現場では用いられていないそうです。

(※私が実際に見たわけでも触ったわけでもありません。もちろん例外もあります。)


こんな階層で探すくらいなら、各レコードに「キー」(←各データを区別させるもの)

を持たせて、1階層だけで管理するというのです。



長くなったのでここまで。

次は関係型についてのお話とします。