今回はデータベースについて解説していくよ!
データ、ベース?ファーストとか、セカンドも関係あるんですか!?
それは野球、僕たちのやっているのはIT!
データベースってのは、テクノロジーの基本となるデータを扱う情報システムの根幹の技術だよ。
根幹…こ、これさえ抑えればシステム開発もできちゃうとかですか?
うーん半分正解で半分間違いかな。
データベースだけだとシステムはできないけど、ほとんどのシステムではデータベースを使うからデータベースの知識は必須だと言える。
今回はそんなデータベースについてしっかり基礎から解説するよ。
関係データベース
データベースとは
データベースとはデータを保存しておく入れ物だよ。
メモ帳とかワードソフトなどのファイルとは違って、複雑な条件での検索やら統計処理なんかに使うときに便利な役目を果たす特徴がある。
データを保存する専用の仕組みというのがデータベースってわけ。
データベースに保存したデータは保存だけじゃなく共有や選択、加工、色々な処理が可能になる。
データベースの中でも行と列で構成される表形式のデータ格納を行うのを関係データベースというよ。
関係データベースの別名はRDB(リレーショナルデータベース)とも言う。
表のことをテーブルと呼んで、列のことをフィールドや属性と言って、行のことをレコードや組、タプルなんかと呼ぶよ。
図にまとめるとこんな感じ。
ちなみにデータベースとして出題されると言うよりもDBMS(データベース管理システム)として問題では出題されるよ。
データベースを管理してるシステムってだけだから、言葉は違うけど基本的には「DBMS」=「RDB」のことって思っておけば大丈夫!
主キー
データを表にとにかく保存すればいいってわけじゃないのがデータベースの特徴なんだ。
例えば、お客さん情報を格納するテーブルがあったとしよう。
電話番号と名前をデータとして登録したい。
単純にその二つのデータを属性として表にするのは間違いなんだ。
これだと同姓同名の場合にどっちの電話番号だったかわからなくなってしまう。
だから、必ず主キーというものがテーブルには必要になってくるんだ。
行を一意に決定するタプルのこと。
今回の場合ならお客様番号というのを作成する。
お客様番号の条件として必ず一人に一つのユニークな番号(番号がかぶることがない)という形にするよ。
すると、テーブルはこんな感じになる。
(お客様番号を含んだテーブルの図)
これによってお客様番号で確実に目的としている行にアクセスできるようになる。
ちなみにこの主キーによって一意の行が決定する仕組みのことを一意性制約って名前があるよ。
もしもデータを登録するときに主キーを設定するのを忘れてしまったらどうなるんですか?
基本的に主キーなしに登録することはできないからエラーとなるよ。
だからお客様番号なしで登録しようとするとエラーになってそもそもデータ登録できないんだ。
で、では、逆に名前と電話番号を設定せずに登録するってのはどうですか?
その場合はテーブルの作り方によるけど可能だよ。
お客様番号だけ入っていて他のデータが空(NULL)の時も存在させることはできる。
ただそれだとデータとして意味がなくなっちゃうから基本的には「電話番号が空はダメ!」「名前が空は登録できません!」みたいなルールをテーブルに設けるんだ。
テーブルってシンプルな保存場所なだけじゃなく、登録できる条件とかも設定できるんですね。
そう、基本的にテーブルを作る際に設定することができるんだ。
集合演算と関係演算
データベースをただのデータの保管庫として使うのはもったいない。
うまく利用することでたくさんのデータから意図したデータだけを抽出したり、新たなデータを作り出すことだってできるんだ。
集合演算と言われるデータベースの計算ではテーブル同士を合体させたり、引き算させたりすることで新しいテーブルを表現することができるんだよ。
種類は三つで、和演算と差演算、積演算だ。
和演算は二つの表の足し算で、二つの表から全ての行を抜き出して新しい表にする。このとき同じ表については統合されるよ。
差演算は二つの表による引き算をする。目的の表からもう一つの表を引く感じで、重複している行だけ目的の表から無くなるんだ。
積演算は二つの表の共通部分を抽出する処理になる。
三つの演算手法を図でまとめたのが下記だよ。
続いて、関係演算。
試験ではこっちの方が出題されやすい。
覚えておくべき関係演算は、「選択」「射影」「結合」だ。
選択はテーブルの中から必要な行を抜き出す。
射影はテーブルの中から必要な列を抜き出す。
結合は二つの別な意味を持つ表を合体させる。
図で見た方がわかりやすいから下の図を見てみて。
選択と射影は単純にどの行にするか(図の条件は注文番号)、どの列にするか(図の条件は商品名)
結合は注文の表と商品の表を合体させて、注文と商品が一覧で見える表が出来上がっているんだ。
も、もしかして、行のどれを選択するかを決めるために主キーが重要になってくるってことですか?
その通り!もしも主キーがないとこういった操作ができなくなるんだ。
結合でも主キーによって行が決まらないとどうやって合体させればいいのかがわからなくなる。
データのモデル化
正規化
データベースを扱う上で重要なのが正規化!
正規化はデータベースに登録できる形に整えることを意味しているよ。
例えばこんなデータがあったとする。見た目はわかりやすいような気がするけど、これだとデータベースに登録することはできない。
(よくないデータ例)
二行目、主キーがない!
その通り!
主キーがないとそもそも行を一意に決めることができなくなるからデータベースに登録できないんだ。
こういったことが起こらないようにデータベースに登録できる形にデータを整えよう!というのが正規化になる。
正規化の例は下に示すよ。
(正規化前の例)
この表は一見完成しているように見えるけど、もう少し正規化することができる。
商品番号が外部キーになっているんだ。
外部キーとは主キーほど行にうるさくはないけど、外部キーでも行を一意に決められる属性のことだよ。
だからさらに正規化をするならこうなる。
正規化には段階が1~5まであって試験に問われるのは第3正規形までで、今回紹介した例は第三正規形になる。
それぞれの段階の正規化については下を参考にしてみて。
第1正規形:非正規形から繰り返しを取り除いた形
第2正規形:主キーによって、他の項目が一意に決まる形
第3正規形:主キー以外の項目(外部キーとか)によって他の項目が決まらないようにする形
正規化って絶対した方がいいんですか?
絶対第3正規形までするべきかと言われたらそんなことはないよ。
正直データベースに登録できるレベルになれば基本的に正規化はそこまででいい。
ただ試験では問われることが多いし、あまりにも正規化できていないテーブル構造だとプログラミングの際に面倒になったりするんだ。
E-R図
データベース上の関係を表す方法にE-R図というものがある。
データ同士がどんな関係にあるのかを表す図だね。
エンティティと呼ばれるデータと関係を表すリレーションシップによって構成される図で、例えば「注文に対して商品がいっぱいある」という場合はこんなE-R図になる。
注文 – 注文明細 -(多)商品
データ同士の関係がわかりやすくなったと思う。
書き方としては「1対1」「1対多」「多対多」の三つしかない。
関係がどういったものになっているかを考えながらこの三つを組み合わせて書くんだ。
例えば、学生と卒業証書だったら1対1。担任の先生と学生ならば1対多。先生と科目とかだと多対多となる。
DFD
システムの全体像を把握するために用いられる図がDFD(データ・フロー・ダイアグラム)だ。
データの流れに焦点を当てることで、業務プロセスの全体像を浮かび上がらせる方法になるよ。
どういった情報のやり取りを行って、システムはどこの部分に関わっていくのか、ユーザはどう関わっているのかを整理することができる。
図としてはこんな感じ。「お小遣いの管理プロセス」を例に説明した図だよ。
○:プロセス、データをいじくるところ
□:源泉、吸収、データを使うところ
→:データフロー、データの流れ
=:データストア、データをとっておくところ
データの流れが見えるようになって、どういったデータが必要でどういう形式で登録するべきかが見えやすくなるんだ。
まとめ
今回はデータベースの基本と、データ関連の図の手法について紹介してきたよ。
どうだったかな?
は、初めての考え方で難しい部分もありますが、かなり理解できたかなと思います。
私もあとはもうちょっと選択とか結合とかいう部分を復習できたらいいな。
二人ともいい感じだね!
そうだね、このあとは実際に問題を解いていくのが一番理解が早まるし定着になるからどんどん問題を解いていこう!
じゃあ、今回はここまで、また次回!
はい!ありがとうございました!!