<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門部屋>MS-Accessを使いこなすために・・
  (←別ウィンドウでサブメニュー)



1.テーブル設計の基本

さてさてさてさて・・・。「その2」へようこそ〜

  「表形式のフォームを新規に作りましょう」
  「社員テーブルをデザインビューで開きましょう」
  「クエリ1を手直ししましょう」

などと言われて、だいたいどういう行動をとればいいのか、だいたい雰囲気はつかめてきましたですか?
雰囲気さえつかめれば、わからなくなったときどこをどう調べればいいかわかりますもんね。わからなくなったら調べればいいんですから、そういうおつもりで気楽に使ってみてください。そうすることでけっこうスムーズに習得できちゃったりしますよ。

しかしながら、MS-Accessは、ソフトウェアの使い方やオブジェクトの作り方だけ覚えても、どうしようもないんです。
それは、理解なさってると思うんですけれど・・・そうですよね。車の運転ができても、道を知らなければ行きたいところにも行けないし、交通ルールを知らないと思わぬ事故に巻き込まれちゃう可能性もあるし・・・。
今回は、データベースを作るときにきっと必要になるだろうと思われることを中心にお話をしていきます。
ぜひ、皆さんの身近な業務に置き換えていろいろと考えてみてくださいね。

半分くらい、「データベースを扱うときの考え方」みたいなお話が入ってきますので、ちょっと退屈かもしれませんが・・・でも、きっといつか役立てていただけることばかりだと思います。

できたら、時間を少しとって、じっくり読んでいってください。よろしくお願いします。

いちおう、こんな感じで、盛りだくさんで進めていきます。
順番にお話をしてまいりますので、できましたら、順番に見てってくださいませ。



うちのチームの社員名簿↓です。みんななかなか働き者ですよ。

みんな毎日、何時間か働くんですが、働いた時間はどういうふうに入力しておけばいいんでしょう。

うーん、こうかな↑
で、今日も一日お疲れさまでしたー。
みんなの労働時間を入力して↓


翌日もみんなよく働きましたー

で、二日目の労働時間を足し算して・・・・。
って、これでいいんですかね???


クエリを使って、時給と労働時間を掛け算すれば、とりあえずお金の計算はできますよね。
月末になったら労働時間のところを全部ゼロに戻せば、来月からまた新しく労働時間を出すことができるから、これでもいいのかな。どう思います?

考えるんですっ

これはかなりデータベースっぽくない考え方です。
もちろん、やりたいことはできるかもわかんないですよ。でも、もし「○月×日ベムラーさんは何時間働きました?」って聞かれたら、答えられないじゃないですか。これじゃ。全部足しちゃってるんだし。記憶をたどるしかないですよね。
こういう場合は、発想を変えます。
データベースにたまるデータの単位を考えるんです。単位っていってもキロメートルとかじゃないですよ。
この場合は、「誰が何日に何時間働いたか」という情報を蓄積していくように考えます。
「何月何日」と「誰が」が、この場合のデータの単位です。

でも、↑こう設計しては、なりませんよ。
これでも作れないことはないですが、データベースというものを作っていくつもりなら、情報は縦に伸びるように考えます。
だって、よく考えてみると、使ってる途中でしょっちゅうしょっちゅうテーブルにフィールドを追加していかなくちゃならないなんて、使いづらいですよね。たまには後から追加しなくちゃならないフィールドも出てくるかもしれませんが、当たり前になってはいけません。

なので、こういうふうに考えます↓

つまり、「社員が1日働いたら」、それがこのデータベースでのデータの単位になるのです。



この表がどういうデータの持ち方をしているのか、じっくり観察してみてください。

これで、時給と労働時間を掛け算すればお給料が出ますが、こういった「計算結果」は、できるだけテーブルにフィールドを持たずクエリで計算して結果を出すように考えます。できるだけ、です。テーブルはあくまでもデータを貯めていくための器なので、この中で計算してその都度答えを求めるような考え方は持ってません。なので、「計算した結果を出す」場合は、クエリを活用するように考えていったほうがよいでしょう。

ちょっと横道にそれますが・・・たまに「テーブルに関数を埋め込むにはどうしたらいいんですか?」なんて聞かれることがあります。表計算ソフトの感覚なのだと思いますが、データベース側から見るとドッヒャーな質問ですので、テーブルの役割をもう一度おさらいしておいたほうがよいかもしれないですね。どうしても理解できないのであれば、多分、表計算ソフトを活用したほうがよいのかもしれませんよ。もしかしたらデータベース化するのには不向きな業務なのかもしれません。なんにしても、使いやすいソフトを使うのが一番ですよ。



で、先ほどの表ですが、よく見ると、別に毎回時給や入社年月日が変わるわけでもないし、社員番号がわかるなら名前は後で参照できますよね。

人間の手でノートに書き込んだりして記録していくなら名前もあったほうがいいかもわからないですが、この情報はいずれコンピュータに任せるのですから、社員番号だけあれば、その社員番号の持ち主がだれであるか、すぐにつながります。なので、このように、「社員ひとりにつき1行、データを持つ表」「ひとりの社員が1日働いてきたら1行増える表」を別に作ります。

こうすれば、たとえば社員が1000人に増えて、労働テーブルに1日1000行、1年で365000行のデータが入ってくるようになったとしても、最低限のデータ量で済むと思うんですよ。労働テーブルに「名前」も持つようにすると、1列分データ量が増えるわけですよね。中には長ったらしい名前のヤツもいるだろうし。。。。
必要な項目を削っちゃいけませんが、余分な項目をダブって持たなくても済むようにいろいろと考えてテーブルを作っていけば、それが使いやすくて効率のよいデータベースにつながるんです。リレーショナルデータベースっていうのはそういう考え方のデータベースなんですよ。

でも、こういう設計をやるのはほんとに難しいです。ある程度パターンはあるかもしれませんが、やっぱり「どういう業務なのか」によって考えなくちゃならないことも変わってくるので・・・・。MS-Accessの操作方法とは別に、少しずつ考え方を養っていかれるとよいと思いますよ。