<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門部屋>なりきりデータベース設計



 −「難しさ」について考える

「MS-Accessの中で、VBAを覚えることが一番難しい」と、言う人、いますよね。
決して間違った認識ではないと思います。
でも、このコーナーでお話することは、難しさの「度合い」が少々異なります。
VBAはあくまでも「データベースをより効率よく運用しより使いやすくするための手段」です。
「手段」の中には、そりゃ、難しいものもありますよ。VBAっつったって、決して簡単な言語ではありません。
構造はけっこう複雑です。理解するのは本当に難しいと思います。

でも、でも、よく考えてみてください。
せっかくのVBAという言語、設計不足による欠陥住宅のひずみや隙間を埋めるための技術・・・に成り下がってしまってはいませんか?
VBAとは、設計不足によるデータベースの不具合部分を埋めるためにぶん回すものではありません。
設計がシッカリできていて、自然に、しかるべきデータがたまるようなテーブルが用意されていれば、そんなにバカバカコードをぶん回す必要もないはず。
その分、フォームのデザインに凝ったり、より入力しやすくなるような工夫をしたり・・・
VBAってもんは、できれば、そういったシチュエーションで登場させたいもんです。
現状の不備や不具合を穴埋めするためのコード作成にばかり時間を割くことは、あまりに非効率で、あまりに情けない。

特に、MS-Access以外のデータベースはまったく知らない、という方は、システム設計とか現状分析とか、よく分からない場合が多いと思う。
だから、「VBAが一番難しい」「VBAが書ける=上級者=自分も早くそうなりたい」と、ちぐはぐなことを考えてしまう。

本当に難しいのはなんなのか・・・について、考えてみたいと・・・というのが、このコーナーの趣旨でございます。
本当に難しいのは・・・「現状分析」「設計」だと、わたしは思います。





 −「データベース」とは何か?を考えてみる。なぜ「データベース」にする必要があるのか???

「データベース」とは、「データを蓄積し、蓄積したデータを活用するための仕組みや環境」のことを言います。
MS-Accessは、こういう仕組みを手軽に作ることができるソフトウェアの一種です。
何を入力し、何を出力すべきなのか、を、大まかに考えて見つめなおさなければなりません。

まず、フォームだのコマンドボタンをクリックしたらどうのこうのだの印刷がどうだのという、コマゴマしたことはいったん取っ払って、
「今、何があって」「結果として何を出したいのか」を、シンプルにシンプルに難しく考えずに、図にしてみます。
これがねぇ・・・実はすごく難しい。人間誰しもちょっと見栄やプライドが働いてしまって、難しいシステム系の用語とか使いたくなっちゃうんですけどね。
でも、難しい用語を使い始めちゃったら、ジ・エンド、です。話し言葉でオッケー。
何があって何を出したいのか、何が足りないのか・・を大いに語り、大いにラクガキしてみましょう。


入力っつったって、都合よく自然にデータが発生するわけじゃないので、誰かがなんかしらして入力しないといけません。
入力が複雑だったり、面倒だったり、ワケわかんなかったり、やたら入力項目が多かったりしたら、多分誰も入力しなくなると思う。
そうなったら、データベースの存在自体、意味がなくなってしまいます。
でも、必要なことはちゃんと入力しないと・・・。
入力日付が入ってないのに、入力日付ごとに集計したいなんて言い出されても、ない袖はふれません。

今現在、無理のない程度に、でも、必要なデータはちゃんと入力できるように・・・考えることが必要です。
そのためにも、ここでいきなりテーブルのデザインとか、VBAでどうやるのかな?とか、そういうことを考えたらダメなんです。





 −「リレーション」などと、簡単に言うけれど

さらに、MS-Accessは「リレーショナルデータベース」という考え方が基本になっています。
「データの集まり」を一塊として考えることもありますが、たいていは、いくつかに小分けして管理できるようにします。


分けないといけない、というわけじゃないんですけどね・・・。
でも、こうして情報を小分けして、必要に応じて関連付け(リレーション)ながら使っていくことによって、情報がダブったり無駄な処理が発生しないようにしていく・・・のが、リレーショナルデータベースの基本的な考え方なので、必要に応じて小分けするのは、もはや定説と考えていただいてよいと思います。

でも、やたらと意味もなく分けても、それはそれで使いにくいデータベースになってしまいます。
っていうか、意味もなく分けてどうする・・・。
リレーショナルデータベースの特性を活かしつつ、必要なデータがシッカリ貯まるように、貯まったデータをシッカリ活用できるように・・・。
「現状分析」と「基本設計」を繰り返しつつ、基本となるテーブルの構造やデータベース全体の構造を浮き彫りにする作業を「データモデリング」と言います。
まあ、用語は別に何でもいいんですが、とにかくこの作業が、実はデータベース作成の中で一番難しく、且つ、一番重要な作業なのです。
これが実に難しい。とても難しい作業なんです。

あっ!!!
このコーナーでは、別に「データモデリング」の技法をお話しようとは思ってないです。そんな滅相もない。
このコーナーは「データモデリングの技法」のコーナーではありませんのでご了承を。
あくまでも、「データモデリングみたいなこと」をやろうと思ってるだけです。それだけです。





 −「現実」を見つめずにデータベース作成

この作業、難しいので、あまりやらない人が多い。やらなくても何とかなります。
できあがったデータベースに合わせて、会社の仕事のやり方を変えていけばいいんですから・・・。
人間は、コンピュータなんかよりずっと融通が利くし、優秀です。データベースに合わせて見積を作ったり発注をしたりすることくらい、どうってことないです。
だから、ろくすっぽ設計しないでいきなりMS-Access起動して作り始めても、なんとかなります。

それでいいのか?って気も、しますが・・・。
できれば、できたら、そうならないように・・・したいなぁと、思うんです。
そうは、思いません?

こういう、データベース基本設計みたいなことって、すごくすごく難しくて、専門のコンサルティング会社さんとかもあるくらいですから。。。
プログラミングの知識とか、そういう技術ではないので、なかなか、一朝一夕にはいかないもんだと、わたしは思います。

こういうことは、MS-Accessの入門書なんかにも、ほとんど書いてないです。
そりゃ当たり前です。MS-Accessの入門書はMS-Accessの操作方法のことを載せるためのものです。
皆さんの会社の顧客管理や商品管理がどういう構造になっているか・・・なんて、載ってるはずがありません。
でも、実はそこんとこが一番不透明で、きちんと把握するのが難しかったりする。
しょうがないので本を見ながらいきなりテーブルを作り始めて、どうしていいかわからないままフォーム作っちゃっていろいろ作っちゃって、
あれっ、これじゃ集計ができないじゃん・・・と、VBAでコードを書いてプロシージャ作って、ワークテーブルを作るための処理を組み込んだりして・・・。

本末転倒ですよね・・・。

VBAのコードなんかは、本とか、ヘルプとか、あと様々なWEBサイトさんでサンプルを掲載してたりします。
あまり詳しくなくても、それなりに実現することが可能です。
でも、テーブルの基本設計やデータベースの構造なんかいうことは、どうあがいても皆さんご自身が考えないといけないことです。
誰も助けてくれないです。
これが・・・・最も難しいこと・・・と思われる、もうひとつの所以ですね。





 −「頭でっかち〜なデータベース」にならないために・・・

設計するのが面倒だからといって、木を適当な長さに切って、ヤマカンで家を作り始め、
ほぼ完成したところで、木の長さがあってないがために家が少々斜めになっていることに気づきました。
そこで、木の長さがあってないところに、セメントをつめたり、鎹を打ったり、技術のすべてを注ぎ込みます。
これはものすごい技術です。これだけの技術を注ぎ込めば、何とかなるかもしれませんが・・・。
何で最初から、木の長さをちゃんと計っておかなかったのでしょう。

データベース作りも同じことです。
最初に、まず、データベース化したいオシゴトがどんなオシゴトなのか、現状の分析をしなくてはなりません。

顧客の管理をやりたいなら・・・。

・今、どうしてるのか、なぜデータベース化したいのか
     Excelに入力して営業さんが個々に自分のお客さんの管理をしているだけ。
     他の営業の顧客のことは全然わからない。フェアのご案内とか出したいとき、住所や担当者様のお名前を各営業からかき集める
     これがまた大変。営業はみんな忙しいとかぬかして、期日までにリスと出さないし。
     出さないくせに「イベントの案内が自分のお客に届いてない」とかぬかすし。手間がかかるだけじゃなくて社内が嫌なムードになる。
     何とか取引先の一覧みたいなのを一括管理できないもんか。
・どのくらいの期間でデータベース化できそうか、予算は?
     すぐにでもデータベース化したい。
     でも、お金は全然ない。会社の中のソフトとかを使って簡単にできないもんか。
・どういうことをやりたいのか。何ができたらいいのか
     顧客の情報を全部一箇所に集め、住所、担当者様のお名前、電話番号、過去の取引履歴、担当営業、業種・・・などを検索・照会
     イベントやフェアの案内を郵送したいときなど、特定の業種や特定の地域の顧客だけリストアップして住所の印刷が簡単にできる

と、こんなことをとにかく細かく細かく洗い出します。

やってることは、画面に向かってかっこよくプログラミングやってるイメージとは程遠くて、作業内容としてはドブさらいみたいな感じです。
人間が日々無意識に行動し片付けている仕事のかずかずを、改めて列挙して、それらをどのようにコンピュータにやらせるべきかを考えるのです。
専門用語も技術もいっさい使いません。やることは、まさにドブさらいです。超めんどくさい、地味な作業です。
でも、これが、データモデリングの第一歩です。


 ★ちょっと横道にそれますけども・・・。

多分、これからの時代、↓↓↓こういうことを考えるのも「データモデリング」の一環になってくるのかな・・・と思うことについて・・・。

   数名でデータのシェアをしたい。同時に数名の営業が画面を開いて、自分のお客の情報の修正などを自由にやりたい」とか
   「入力する予定の顧客情報が数十万件になるか数百万件になるか全然まったく見当が付かない」とか、
   「写真や映像などのデータもたくさん持ちたい。データ量やファイルサイズは未定。全然わからない」とか、

現状の様子とか将来どうなるかとか、全然見当が付かない状態なのにもかかわらず、

  MS-Accessって何件くらいデータの入力ができるんですか?(自分で考えろよ)←本音
  MS-Accessって壊れやすいって聞きましたけど本当ですか?(言ったやつに聞けよバーカ)←本音

筋金入りなのが、

  MS-Accessでできるでしょうか?(占い師にでも聞いて来い)←本音

・・・・。
こんな疑問持ったり、ネット上のいろんなWebサイトとか、社外の人にメール出したりしてやたらと聞きまわったりしてませんか?
これはいけませんよ・・・当事者でもないのに、こんなの答えられる人、いるわけないです。
何のためにこんな大切なことを、社外の人とか、全然知らない人とかに気安く聞くですか?
なんか問題が起きたときソイツのせいにするため
アナタは「参考にするだけ」のつもりでも、相手はそうは思いませんよ。きっと。もっと重く受け止めるはず。


 ★「限界」「制限」は、必ず自分自身の目で見きわめを

そもそも、こういう要件が出てくる場合は(どれくらいの件数になりそうか、どれくらいの人数でシェアすることになりそうか、など、はっきりしない場合)
MS-Accessではなく、Oracleとか、MySQLとか、SyBaseとか、そういったデータベースを選択し導入すべきでしょう。
こういったデータベースは、ネットワークでデータをシェアするための能力や機能を持ち合わせています。
なんもしないでただダラーっと使ったるだけでは、壊れたりおかしくなったりするでしょうが・・・。
用意されているさまざまな機能をうまく使っていけば、大勢でシェアできるデータベースを持つことも可能になるはずです。
もちろん、その手のデータベースは、並大抵の努力では使いこなせませんよ。覚悟はしておいたほうがいい。
データベースってのは本来、お金も技術も労力もかかるもんなんです。


 ★Accessって何件くらいデータ入力できるんですかぁ〜初心者なのでおしえてくださぁ〜い♪

この世から消えてくれ・・・。

いちおう・・・念のために・・・MS-Accessには、データ件数の制限はありません。
mdbのファイルサイズは2GBまで。ひとつのテーブルの大きさが1GBまで。これを超えなければ何とか入ります。
こういった制限事項はヘルプに載ってますから、こういったことを気にしておられる方は、必ず目を通しておいてくださいよ。
ヘルプ読まねぇで「教えてください」「教えてください」言うんじゃねぇよ!なんかあったとき人のせいにする気なんじゃねぇのか?!←というのが本音
でも・・・1GBまで、といわれても、普通はわかりませんよね。
大体何件くらいになるのかなぁ・・・。
それを知るためには、本番と同じデザインのテーブルを作ってみて、そこに1000件くらいデータ入れて、mdbのファイルサイズを見て、
1GBだと何件くらいになるのか計算するよりほかに方法はありません。
こう見積るよりほかにないので、データ件数や容量の見積が難しい場合は、他のデータベースの利用を検討すべきだろう、というのが、わたしの考え方です。
だって、まだ何も構想が決まってないのに、テーブルのデザインとかいったってどうしていいかわからないじゃないですか・・・。
こういう状況で正確なデータの件数の見積だなんて、Mr.マリックでもできないと思います(知り合いではありませんが)。


 ★ファイルを「共有する」ということ

「ファイルの共有」って、最近はなんだか当たり前になってきて、返ってイメージが沸かない人が多いのかもしれないですが、
ふつう、ExcelとかWordって、大勢で同時にひとつのファイルを開いて、部分的に作業したり、します?
「山田さんは4ページから6ページを、水野さんは7ページから9ページまでを、わたしは1ページから3ページ目までを入力するので」なんていいながら、
ひとつの文書ファイルを同時に数名で開いて使ったり、します?
ひとりが開いてたら、後の人は「読み取り専用」ですよね。

でも、MS-Accessは、いちおう、レコード単位の管理ができるので、大勢で同時にひとつのファイルを開くことができます。
でも、ファイルですよ、ファイル。同時に開いて使ってて、ファイル壊れたりしたら、どうするんですか???
そうなってからマイクロソフトのせいにしてピーピー騒いでも、大切なデータは戻らないですよ。
騒ぐのは自由ですが、あの会社助けてくれないですよ。データを守るのはマイクロソフトの技術じゃない。皆さんご自身の意識と考え方、です。

最近は、「ネットワークドライブ」とか「シェアドライブ」とか言っても、意味がわからない人もいるくらい、「ネットワーク」って当たり前のことになってますしね・・・。


 ★「パーソナル」という「手軽さ」を長所として考えること

MS-Accessはあくまでも「作った人が使う、個人データベース」を作るためのソフトですからね。
だって、mdbっていう拡張子のついた、パソコンのファイルですよ。OracleとかSybaseのようなデータベースとはわけが違います。
ぽっとファイルを新規作成したら、それがデータベースになる・・・という手軽さが売りなんですから・・・。
現チャリみたいなもんです。高級車や業務用トラックのようにはいかないことも・・・ございますよ。
でもがんばれば、東京から大阪まで行けないことはないかな・・・。てな感じです。

自分自身で判断できないのであれば、どう考えても1GBなんて絶対超えそうもない、そう断言できる場合にのみ、MS-Accessを使うべきでしょう。
あるいは、ある程度技術があって、MS-Accessを使いこなすことができて、様々な工夫を凝らすことができるとか・・・。
例えば、、「大勢で同時にmdbファイルを開かなくても済むようにする」とか、「こまめにバックアップを取る」とか、
(大勢でお同時にmdbファイルを開かなくても済むようにするためには、テーブルと、それ以外のオブジェクトを分けて作る、ということになるわけで。
その話は別のコーナーで一度させていただいたと思います)

「データベースの最適化を、ときどき実行する。最適化を自動化するなんてことは考えない」とか・・・。
適時監視をして、無茶な使い方をしている人がいないかどうか指導をしたり、工夫をしたり・・・。日々の努力がどうしても必要です。

そういった努力を惜しまなければ、MS-Accessでも相当規模の大きなアプリケーション作りが可能だと思います。
これはもう、「がんばるしかない」と、思うんですよね・・・。でも・・・苦労しつつも、実現されてる方はたくさんおられますよ。

そもそも、「大勢でデータを共有する」ために、OracleやらSybaseやらがどれだけ偉そうな高度なテクノロジーを搭載していることか・・・。
mdbなんていうパソコンファイルごときに易々とできるほど甘くないです。





かならずしも、コンピュータで扱いやすいような情報ばかりじゃありませんからね。人間が「会社」という組織の中で使っている情報というのは・・・。
いろんな矛盾点を洗いなおしたり、歯がゆい思いをいっぱいしないとなりません。ドブさらいは地味でつらい仕事です。
なまじ、データベースやプログラミングの技術を持っている人だと、返ってやりたがらないかもしれませんね。ドブさらいなんか。

データベース設計のノウハウを身につけることは、非常に時間のかかることです。
いろんな職業の人になりきって、その職業のいろんなデータをデータベース化するには、どういう情報の分け方が必要か・・・を、考えながら、訓練してみましょう。
これが、なかなか、根気の要る訓練なんです・・・難しくてもやんなっちゃうし、あんまりアホらしい内容でもバカバカしくなっちゃうし・・・。
なるべく、面白おかしく進めていきますので、どうか根気強くお付き合いください。
長い目で見ていただいたら、きっときっといつしか役に立つことじゃないかと、そう思いますので・・・。