<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門>リレーショナルデータベース的考え方」


リレーショナルデータベース的考え方」

あんまり本格的なことは申せませんが、「リレーショナルデータベース」っぽい考え方をするためのお話を少しだけ・・・。


まず、どこかの会社で、社員の一覧表が必要になったとします。
「データベース」の基本方針は、「データを蓄積し、蓄積したデータから必要なデータを抽出する」です。

  
上の図の黄色い部分を固定して、縦に伸び縮みするようなイメージで、データを扱います。


もし、単なる社員一覧表ではなく、「その社員が、何日に何時間働いたのか」という情報もほしいなら、

   
こうやって↑横に項目を追加していく考え方もありますが↑、
現在「データベース」と呼ばれるものの主流は「情報の塊がふたつある」と考える場合が多いです。


  

でも↑単に二つに分けただけじゃわけがわからないので、


こう考えます。↓
  

左は、社員の一覧。右は、何日に誰が何時間働いたか、という情報の集まりを入れていきます。

表計算ソフトに慣れてる方からすると、なんだか気持ちが悪いかもしれませんが・・・。
データベースの世界では、必要に応じて「情報のかたまり」を分けて考えます。

左は、新入社員が入ってきたり誰か辞めたり給料が変わったりしたら、追加削除修正します。
右は、誰かが働いたら、情報が増えます。↓
  

情報の増え方減り方が違うわけです。
「いつ増やしたり減らしたりしなくちゃいけないのか」をじっくり考える必要がありますよ。
これをきっちり見極めるのは、ほんとに難しいんです。
やたらに分けているわけではありません。
給料がしょっちゅう変わるなら、右側に給料の情報を持っておかないとならないかもしれませんよね。

でもって、左と右の表は、それぞれ「番号」という項目によって、結びつけることができます。
まあ、同姓同名の人がいるかもしれないので、名前とかで考えないで、社員番号とか会員番号とか、なんかそういう番号付けをするようにしますね。データベースの世界では・・・。

こういうふうに、用途や目的に合わせて情報を小分けして、小分けした情報どうし、結びつけたりなんかして作っていくデータベースを「リレーショナルデータベース」(関係データベース)と呼んでます。
OracleとかSQLServerとか、現在「データベース」と呼ばれてちやほやされてるやつらは、だいたいこの仲間です。
MS-Accessもこの考え方を持ってます。
リレーショナルデータベースは、非常に効率よく情報管理をすることができる考え方を持ってますが、設計するのがすごく難しいのです。

これと↓
  

これが、↓
  


表の形は違うけど、結局「同じ」であるということがわからないと・・・。
MS-Accessを使いこなすのは、非常に厳しいかもしれません。
でもね、リレーショナルデータベースっぽい考え方を持つのって、すごく難しいことなんです。
焦らず、少しずつ慣れて、考え方を養っていってください。

さて、5月4日もみんな元気に働きました。
労働時間は、下の図で見たところの、黄緑色の線のようにそれぞれ途中行に挿入するのではなくて、この表の一番下にどどーんと追加されるイメージになります。水色のほうの線ですね。
黄緑色の線は、↓表計算ソフトの考え方で、データベースの考え方ではありません。


DBMの機能をきちんと活用していれば、あとでちゃんとこう並び変わってくれます。

  
こんなふうに↑

データベースの世界では、「何行目」という見方はほとんどしません。
毎日毎日みんな一生懸命働いて、その日働いた労働時間をコツコツ入力していって、気が付いてみたらこんな表の形になってた、というのが、データベースの本質です。
したがって、「番号順に、日付順にならんで表示されると便利かも」と思ったら、あらかじめこの表にそういう設定をしておきます。
そうすることで、「5行目を1行開けて5月4日の労働時間を入力して・・・」なんてことをいちいち考えず、とにかくがんがん入力だけしておいて、後で整列させることができます。



皆さん、お財布の中に今いくら入ってます?って聞かれて、どうやって調べます?
お財布から全部出して、机の上に広げて数えるのが一番手っ取り早そうですよね。
同じ種類のコインやお札どうしでまとめて並べれば、早く数えることができます。
でもでも、だったら、最初から机の上に広げておけば、いつでもすぐに「全部でいくらあるか」わかるじゃないですか。
え?持ち運ばなきゃいけないって?
んじゃあ、大きな紙にお金を一枚ずつ並べて貼り付けて、その紙を持ち運べば、すぐお金払うことができますよ。

でもそんなことしている人、いないですよね。なんででしょう?
 ・持ち運びに不便
 ・いくら持ってるか他の人から丸見えになっちゃう
 ・お札やコインの枚数が多くなると、それだけ大きな紙が必要になって、返ってわかりにくくなりそう
 ・別に「常にいくらあるのか知ってないといけない」というわけでもないので、必要なときに数えればそれでいい
 ・なんかダサい

お財布に入れて、持ち運びますよね。
データベースってそういうもんなんだって、そう思ってください。
だから、「どういうふうにデータを貯めていきたいのか、どういうことがわかればいいのか」によっては、データベースじゃなくてMS-Excelとか表計算ソフトを活用したほうがわかりやすくて便利な場合も多々あるわけです。
え?MS-ExcelとMS-Access、どっちがいいのかって?
ああもうまたそういうことを・・・。
それは、「皆さんにとって、皆さんのお仕事にとって、どっちがいいのか?」ってことでしょう?
答えは皆さんしか出せませんですよ。
どっちでもそこそこいけると思います。
用は「使い方次第」ですもんね。

こうして情報を蓄え、後で活用しやすいようにいろいろと作りこんでいくのがDBMの役割なわけです。
上のように、表のようなイメージで作られた情報のかたまりひとつひとつを「テーブル」と呼びます。
「テーブル」という用語と、テーブルを小分けして設計する考え方は、どのDBMSでも共通しているところです。
で、じゃあ具体的にどうやってテーブルを作るのか、とか、その段階に進むと、OracleなのかSQLServerなのかMS-Access使ってるのかによって、操作方法や注意点が変わってくる、という感じですね。

リレーショナルデータベースというのは、「コンピュータの中で効率よくデータを管理していくための考え方」です。
決して、「テーブルを小分けすること」がリレーショナルデータベースではありません。
小分けしたがために効率が悪くなってしまっては、それは単にDBMを使ってるだけでぜんぜんリレーショナルデータベースではない。残念ながら、Oracleを使ってもSQLServerを使っても何を使っても、わけもわからずただテーブルを小分けしたがためにすごく効率の悪いデータベースになっちゃうってこと、ありえるのです。

MS-Accessだって、ちゃんと「リレーショナルデータベース」の考え方を持ってます。
つまり、「データを効率よく管理していくためにはどのようにテーブルを小分けしたらいいのか」がちゃんとわかってないと、逆にすごく使いにくいデータベースになっちゃう可能性があるわけです。
道を知らなくてもカーナビが誘導してくれますけれど、どこに行くか考えるのは皆さんご自身ですよね。
カーナビの操作しやすいところに車を走らせるのでは、いつまでたっても目的地に着きません。
目的地をすばやく探すためにカーナビの機能を旨く利用しなくては。

リレーショナルデータベースを扱っている人の中には、知識や技術は豊富でも、どこか「目的」と「手段」を取り違えてしまってる人、けっこういます。ある程度は、そうなってしまうのは多少仕方がないのかもしれないですが・・・。
でも、ほんとの目的を見失ってしまわないでくださいね。
リレーショナルデータベースの考え方に基づいてテーブル設計をしていけば、使いやすいデータベースを作ることができるはずなのですから・・・。