作って学ぼう!0から始めるJavaプログラミング入門②
GEEK JOB編集部
プログラミング初心者がまずはじめに「?」となってしまうのが、そもそもデータベースとは?というお話です。
そこで本日は、GEEK JOBのプログラミングメンターに「データベースとは」という素朴なギモンをぶつけてみました。
ー はい、じゃあよろしくお願いします。
よろしくお願いします。
ー じゃあ今日は、データベースとはそもそも何なのかっていうのをちょっとお話お聞かせ頂ければなと思います。
よろしくお願いします。
よろしくお願いします。
データベースって何なのかって、データのベースなんですよ。
ー そのままですね。
そのままなんですよ。
まあ、ベースって基地とかいう言葉の意味もあって、物がいっぱいあるっていう所なんですけど、それはまあ分かったとして、もう1つ。データってなんだっていう話ありますよね。
データって何かどんなイメージがありますか?
ー データっていうのは数字とか文字とか。
いいっすね。
ほんとその通りで、今数値とか文字とかっていう風に言ったじゃないですか。
よく似た言葉で情報って言葉ありますよね。
情報とデータって微妙に違う物なんですよ。
その結果としては、データベースっていうのはあくまでデータを管理する物だよっていう風になっていくんですけど、情報って何かっていうと、データを人間がこの目的に使いたいって解釈したものというか、まとめなおしたものになるんですね。
それに対してデータっていうのはまさに数字とか、気温とか、名前一覧とか。
とりあえず大量にありそうな物は全部データになります。
ー ということは、データは降水確率は今日が80%です。
情報はじゃあ傘持っていきましょう。
そう、その通りですね。
そういうことですね。
だからこれは僕の個人的な例になっちゃうんですけど、データベースやるとデータを上手く活用して、データを情報にできるっていうのが1つの最終的なゴールになりますね。
そのデータを活用してそれを情報にしていくっていった時に、データが1個とか2個とかの時は手で管理すればいいんですけど、これが多くなってきた時に、じゃあどうやって管理すれば効率がいいのかっていうのの行き着いた先がデータベースっていう物なんですね。
例えばなんですけど、登録者の情報を管理したいなて思ったらどんな形式で管理しますか?
ー Excelを使って、名前はここに載ります。
応募してくれた日はここに載ります。年齢がここに載りますっていう。
そうですね、Excel使って行と列で分けて、行に生徒情報があると。
で列に名前とか年齢とかどこのコースかとかそういう情報持たせると思うんですけど、例えばそういう風に今のルールで考えてたとして、他の人が今度たまたまここは空行付けたほうが見やすいからとか、ここは空欄の列を付けたほうが見やすいからとか。
好き勝手な事やる可能性ってあるじゃないですか。
っていったときに人間だったらそれってある程度空気読んで扱えるんですよ。
ここはこういう意図かなって。
でもこれを将来的にデータ千件あります。
1万件ありますってなって。
Excelの関数使ってどうこうしたりとかってなる時に、この人たまたま空行入れてましたってなると数値ずれますよね。
この人たまたまこの列変えてましたっておいうと値ずれますよね。
Excelは便利なんですけど、管理しづらいってなるんですよ。
どこまで自分ルールで、どこまで会社で共有されてるルールなのかとか。
その辺を完全には決めきれない。
だったら最初から必ずこの形式でデータ入れます。
その代わり必ずこの形式でアクセスすればデータ取り出せますっていう仕組みをつくっちゃえばいいんですね。
それがデータベース。
だから大量にあるデータに対して、入れ方絶対に固定する。
取り出し方も固定する。
その代わり誰がデータを格納しても一定の取り出し方で全部取り出せる。
目的に応じたデータ取り出せる。
っていうことがデータベースのやりたい事なんですね。
ー データベースの仕組みはどうなってるんですか?
良い質問ですね。
データベースの中では値をどう保存しているかっていうのがあって、今一般的にデータベースの製品になっているのは、リレーショナルデータベースっていう物なんですね。
RDBって書いたりするんですけど。
これはほぼExcelだと思ってください。
RDBは結構僕達がExcel使ってるとか、Excel見た事あるっていう人にとって使いやすい形式ではあるんですね。
値を表形式で管理してます。例えばなんですけど、登録者のテーブルがあったとして、これちょっとあとで書きなおそう。
名前とIDもあって、コースもあって、言語もあると。
例えばIDが1から連番で振られていて、名前も例えばタナカとかサトウとかあって、コースが学習と転職とJava、PHPと。
こういう風な表形式でまとめてあるのがRDBっていう物になるんですね。
先にちょろっと脱線すると、じゃあRDBじゃない方法って何かあるのっていうと、まず色々あって、1つはそれこそExcelみたいな物もそうなんですね。
まあテキストファイルにバーッて全部書いちゃうっていうのがあるんですけど、あれフラット形式って言うんですけど。
階層とかなくただただ文字がビーって書いてある物とか、あとWindowsとかMacとかがあるように、階層構造になっている。
1つのフォルダの中にちっちゃいフォルダがあって、そのフォルダの中にまたちっちゃいフォルダがあって、最終的にはデータになってるっていうデータの管理の仕方もあります。
でもデータベースっていった時に一般に使われるRDBでは、フォルダ分けとかは一切せずに、表が沢山ある事によってデータを管理してます。
じゃあExcelと同じなのっていうと、そこは微妙に違っていて、Excelって見出しだったら見出しの行に書いてあるとか、物理的とか言うんですけど、物理的にこの行に書いてあるじゃないですか。
1行目に見出しがあって、2行目から情報みたいな。
人によっては1行目だけが見出しだけど、また別の人になったら1行目2行目が見出しだったりする。
でもリレーショナルデータベースでは別にこれ見出しの行がどこかに存在している訳ではないんですね。
あくまでも見出し情報があって。で登録者情報もあると。
これを必要に応じて取り出すことができますよっていう物なんですね。
だから取っつきやすさとしてはExcelとかと同じなんだけど、内部的にはExcel程緩くはない感じに決まっているっていう物になります。
ー なるほど、Excelっていう例えがあると分かりやすいですね。
Excelいいですね、確かに。じゃあExcelとの違いはなんなのっていう風になると、リレーショナルっていう言葉にも関係してくるんですけど、基本的にこのリレーショナルデータベースっていう物では巨大な表は作らないんですね。
どうするかっていうとちっちゃい表を何個か作って、その表同士の関係をプログラムによって記述すると。
何の事かっていうと、例えば1つ目のテーブルにはIDと名前とコースIDとかにしましょうかね。
コースIDにしておくじゃないですか。そしたらコースIDを管理してる別なテーブルがあって、このコースIDを管理してるテーブルにコース1、コース2、コース3、コース4っていう風に数字が書いてあるんですね。
そこに例えばJavaの転職コースとかJavaの学習コースとか。PHPの転職コースとかってあったとします。
もし仮に一つの巨大な表で管理してた時に、ある日転職コースと就職コースを区別するの辞めたいなと。
全部就職コース1本化したい。
いったときにこれ全部変える必要ありますよね。
でも今コース専用の表を作ったことによって、転職コース就職コースに変えたいなってなったら、ここの1か所変えれば済むようになるんですよ。
っていう風に変更がしやすい。
っていう風にここがリレーショナルっていう物になるんですけど、全部を管理する巨大な表ではなくて、何か表を沢山作ってそれを上手くリンクを貼って繋げて、欲しい情報を取り出す。
こういう事をやってます。
ー じゃあ物凄く初歩的な素朴な質問をしても大丈夫ですか?
全然大丈夫です。
ー データベースってどこにあるんですか?
いい質問ですね。
データベースってどこにあるのかっていうと、データベースそのものはないのかな。
概念かな。僕達がデータベースだと思っている物って実はデータベースじゃないんですね。
キャンプのカリキュラムでMySQLっていうデータベースを使うんですけど、あれはデータベースではなく、リレーショナルデータベースマネージメントシステムの略なんですよ。
マネージメントシステムなんですよ。
これは管理システムなので、データベースを管理するためのソフトウェア。
1つの専用プログラムですね。
このMySQLとかのデータベースが何か巨大なファイルみたいな物を見に行ってて、そのファイルの中にデータ情報が格納されていると。
多分それはMySQLのフォルダの中を探していけば、やけに巨大なファイルがあるなといって情報多分取り出せるとは思うんですけど、それを人間が読める形式ではないはず。
あくまでもこれは概念的な存在。
逆に言うとこれがどういう形式で保存されてるかっていうのは僕達気にしなくていい。
全部そのMySQLのプログラムがやってくれる。
保存の仕方と取り出し方だけ決めておくという物ですね。
極端な話僕もよく分かってないと。
分からなくなくても良くなっちゃうっていうのがこういうツールなんですね。
ー 確かにちょっと概念ですよね。
そうなんですよ。テキストファイルに情報一生懸命書いていたり、Excelに書いていたりっていうのは文字通り書いてたわけですよね。そのファイルの中に。
でもMySQLっていうデータベース管理ツールを使った事で、書くっていう作業がなくなったんですよ。
MySQLに対しては結局書くんですけど、あれはどこ書いたかなみたいな。
ファイルの場所わかんねえなとか。
そういうこと一切気にしなくて良くなる。全部MySQLがやってくれるってなりますね。