アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

はじめから!リレーショナルデータベース

こんにちは!ゲームだいすき志田です。
ゲームをやっていると、どのアイテムが足りないとか、自作キャラクターの性能だとか、
管理したいなぁってこと、ありますよね?ないですか?ありますね。

そんなとき、データベースを使いましょう!

今回は、DBとはなにか、というところと、簡単な正規化について勉強しましょう。


データベースとはなにか



とはいえ、最近、猫も杓子も「データベース」ですね。
…便利そうなのはわかるけど、DBってそもそもいったい何でしょうか。

データベースとは、Data Base、データの基地という意味で、
つまりはデータの集合です。

世の中には、いろいろな種類のデータベースがあります。
・リレーショナルデータベース(関係データベース)
・オブジェクトデータベース
・階層型データベース
・ネットワーク型データベース
・分散型データベース

この入門記事では、最もポピュラーでよく使う、「リレーショナルデータベース」を例にとり、説明していきます。
どのくらいポピュラーかというと、DBといったらリレーショナルデータベースを指すくらい有名なタイプのDBです。

なぜDBを使うのか



便利便利と言われているものの、なぜわざわざ新しいことを勉強してまで、DBを使うのでしょうか。
それは、こんなメリットがあるからです。

データの統合化・共有によるメリット

例えば、紙の社員名簿で社員を管理している会社を想像してください。
総務部で持っている社員名簿と、人事部で持っている社員名簿があったときに、
どちらかだけが更新されたら、データとしての一貫性が保てなくなります。

あっちの名簿にはAさんがいるのに、こっちにはAさんがいない!
Aさんは結局、いるの?いないの?ということになりかねません。
これが、統合化によるメリットです。
データはひとつにまとめましょう、ということです。

もうひとつのメリットが、共有です。
データと、それを扱うプログラムが独立していると便利なのです。
給与計算プログラムと日報プログラムといった、別のシステムが動いているときに、
どちらも同じ社員名簿DBを参照していると、先ほどのような一貫性がない状態を避けられます。

うーん、なんて便利なんでしょう…!

データベースシステムの構成



では、そのデータベース。どういった構成になっているのかを見てみましょう。



ユーザやシステムが、「名簿一覧が欲しい」と命令をします。
この命令をDBMS(Data Base Management System/データベース管理システム)が受け取ります。
DBMSはDBから、その命令に合ったデータを取得して、ユーザに返してあげます。

世間で、MySQLOracle…などと言っているのは、このDBMSの製品名です。
DBMSはHDDに格納されている実際のデータを管理し、命令を理解して結果を返しているのです。


まさとし はじめてのデータベース



HP作成の業務を終えたまさとしさんに、また新たな仕事が舞い込んできました。
「まさとし君、うちの会社の取引先リスト、データベースにならんかね?」

まさとしさんの会社の取引先リストは、なんと紙だったのです!
紙で管理していると、どこの会社のダレソレさんは退職しただの、住所移転しただの、
そういった情報がごちゃまぜになってしまいます。
それに…先輩の字はミミズがのたくったようで、全然読めないんです!

「わかりました、やってみます!」
がんばれまさとし!

まず、まさとしさんは、紙の情報を整理することにしました。



取引先リストを紙にまとめると、このようになりました。
「データベースに載せる項目は、こんなモンでいいかな…」

すると、まさとしさんの後ろを先輩が通りかかりました。

「おっ、まさとし、それって非正規形の表だね!」

非正規形の表とは



非正規形の表とは、更新異常が起こってしまう表のことをいいます。
更新異常には、3つの種類があります。

(1) 変更異常
情報を変更するとき、重複したすべての情報を変更しないと矛盾が発生してしまうことをいいます。
例えば、株式会社 とりもち商事の住所が変更になったら、どうなるでしょうか?
この表のうち、会社名が「株式会社 とりもち商事」であるデータ全ての住所を変更しなくてはなりません。
とても面倒です。

(2) 挿入異常
項目が混ざっているために、新しいデータを追加できない異常のことをいいます。
例えば、「新しく取引先を追加したい、だがまだ担当者はいない」という場合、この表にデータを追加することはできません。
(会社の情報と担当者の情報がいっしょくたになって入っているからです!)

(3) 削除異常
削除をしたときに矛盾が発生してしまうことをいいます。
例えば、「株式会社 とりもち商事」のデータは2件ありますが、高木さんと赤坂さんが退職された場合、
この表から2人の情報を削除してしまうと、とりもち商事の会社データ自体もなくなってしまいます。

つまり、非正規形の表がイケナイのは、なんでもかんでもごちゃまぜにしているからなのです。


正規化をする



ではこの非正規形の表、どうやったらいいかんじの表になるのでしょうか。
いいかんじの表にすることを、「正規化する」といいます。
正規化するとはつまり、ごちゃまぜになった表を分割して、わかりやすく、扱いやすくすることです。

正規化には、分割の段階によって、第一正規形、第二正規形、第三正規形、Boyce-Codd正規形(ボイス・コッド正規形)、第四正規形、第五正規形という種類にわかれています。
ただし、実際の業務においては、ボイス・コッド正規形や第四、第五正規形を行うことはあまりありませんので、
第一正規形から第三正規形まで、流れでできるようになりましょう。
慣れてしまえば、非正規形の表からすぐに第三正規形の表を導けるようになります。

第一正規形



第一正規形とは、重複して現れる部分を分離することです。
先ほどの表でいうと、重複しているのはどこでしょうか。
そう、「会社名、会社住所、会社電話番号、部署名、課名」が、名刺をくれた社員さんごとに重複していますね。
まずは、これを、値の集合のない表にしてみます。



会社と社員を分けて考えることで、ずいぶんすっきりしました。

ここで、関数従属性について考えてみます。

関数従属性



関数従属性とは、Aの値を決めるとBの値が決まるというものをいいます。

例えば、「会社名がわかれば、会社の住所と電話番号がわかる」
「会社名がわかれば、その会社に存在する部署がわかる」
「部署がわかれば、その部署に存在する課名もわかる」
「名前がわかれば、性別、メールアドレス、個人電話番号、登録日、備考がわかる」

では、このAがわかればBがわかるという関係ごとに、表を分割してみましょう。


第三正規形



関数従属性をもとに、表を分割してみました。



こう分けることで、会社の中に部署が、部署の中に課が、課の中に社員がいる、という関係が流れるようにわかりますね。

それぞれ、会社や部署には一意となるIDを振って、全体を眺めた時にわかりやすくしました。

会社IDが1である、「株式会社まーべらす」には、部署ID1と2である営業部、開発部がある。
営業部には営業課、開発部には製品開発課があり、
営業課には山口さん、田中さん。製品開発課には竹田さんがいる。

関数従属というと意味がわかりにくいですが、要は、マスタファイルを作るということなのです。
会社の情報は、会社マスタファイルだけで修正すれば楽ちんですね。

こうして、個々のデータ同士の関係を切れるぶんだけ切っていくことが、正規化するということです。

では、次回はこの正規化したテーブルをもとに、型について考えて行きましょう。